)

3247 ワード


1.最初の試み


int main()
{
int num = 0;	//카드 개수
int i = 0, j = 0;
int big = 0;	//가장 많은 카드 개수 저장
int k = 0;		
int arr[100000]={0};	//카드 숫자 저장할 배열	// 2^62 넣어야하는데 lond long 배열이 안됨 ?.?
int Arr[100000] = {0};		//어떤 카드가 많았는지 개수 저장할 배열

scanf("%d", &num);	

for (i=0; i < num; i++)
	scanf("%d", &arr[i]);	    
    
for (i = 0; i < num; i++)	//숫자 카드 숫자들을 비교
{
	for (j = i + 1; j <= num; j++) {
		if (arr[i] == arr[j])
			Arr[i]++;
	}	
}

big = Arr[0];
//Arr[]에 저장된 값 중 큰 값을 찾아내기

for (i = 0; i < num; i++)
{
	for (j = i + 1; j <= num; j++) {
		if (big < Arr[j])
			big = Arr[j];	//가장 많이 중복된 카드의 '값'를 저장
	}
}

for (i = 0; i < num; i++)	
	if (big == Arr[i]) {
		k = i;
		break;	
        //찾았으면 탈출. ~~근데 같은 장수 있으면 더 작은 수 출력해야하는데?~~
	}
		
printf("%d", arr[k]); 
return 0;
}
これは適切な数(int)の範囲で正常に動作します.
(もちろん、同じ数であれば、より小さな数のコードを出力することは含まれません)
でも.
★質問★
1.int arr[100000]={0};のlong long配列が無効です.
私は-2^62から2^62に参加します.まずこれは宣言できません.
これがどうしてだめなのか分からない.
long longが配列を発表すると、最初のscanfから何も働かず、そのまま閉じます.(これをintに変えれば正常に運転できるので問題だと思いますが、何なのか分かりません)
2.最大長寿数が複数の場合、小数を出力する必要があり、ここではおかしいと直感する.
最初からやり直すようです.最初から並べ替えて、それから近づくと便利かもしれません.
3.改めて見るとクレイジーすぎる
だから…………………………………

2.2回目の試み


-どうしてlong long配列が生成できないの?
ウィンドウを作成すると、ウィンドウはすぐに閉じます.
調べてみましたが、大きすぎてダイナミックな配分が必要です.
int main()
{
int i = 0, j = 0;
int n = 0;

long long arr[100000] = { 0 };
long long* ptr = (long long*)malloc(sizeof(long long)*100000);

scanf("%d", n);
for (i = 0; i < n; i++) {
	scanf("%lld", &arr[i]); //★
}
for (i = 0; i < n; i++) {
	printf("%lld", &arr[i]);
}
return 0;
}
まずこのように変えました.
でもあの星から間違いがあったどうしてですか.
でも!!!!!!!!!!!!!
他の人は長い並びしか書いていないと思うので、ノートパソコンでやり直してみます.
突然他のパソコンでlong long配列をするのは間違いないでしょうか??
何か問題がありますか.いずれにしても、不要なので動的配分は断念しました.

=================================================

3.最後の試み。


-並べ替えや数がまだ実施能力が足りないので、私が思うように実施できない(どのように回すかを考えても、必要な資料型を判断したり、どのように時間を短縮したりするかを基本的な常識がない.資料構造など・・・何か問題を解決するために勉強する必要があるようです.)
-最終的にC++に転向(sortを書くため)
#define _CRT_SECURE_NO_WARNINGS
#include
#include
using namespace std;
int main()
{
long long arr[1000000];
int num;


scanf("%d", &num);

for (int i = 0; i < num; i++)
{
	scanf("%lld", &arr[i]);
}

sort(arr, arr + num);

long long ans = arr[0];
int final_cnt = 1;
int cnt = 1;

for (int i = 1; i < num; i++)	//정렬한 것을 비교 
{
	if (arr[i] == arr[i - 1])	//이전 수에 같은 수 있었으면 카운트 +1
	{
		cnt += 1;
	}
	else
	{
		cnt = 1;
	}

	if (final_cnt < cnt)	//최종 카운트보다 많은 카운트가 나타나면 업데이트!
	{
		final_cnt = cnt;
		ans = arr[i];
	}
}
printf("%lld\n", ans);
return 0;
}

結局こうやって解けた.
cを使えば泡で並べ替えられるようですが、タイムアウト(誤、恐怖症)になる可能性があります