)
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を使えば泡で並べ替えられるようですが、タイムアウト(誤、恐怖症)になる可能性があります
Reference
この問題について()), 我々は、より多くの情報をここで見つけました https://velog.io/@haesolj/ㅇテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol