2017-08-23 8 views
-1

私はスキャンしたすべての整数の中で最小の整数の周波数を見つけなければならないという問題をコードする必要があります。私は配列の型をsize_tであると宣言しました。私のマシン上には8バイトのsizeofがあり、データ型はunsigned longでしたが、私のコードのハッキーに最終的に実行時エラーが出ます。配列に10^9の整数を格納するために使用するデータ型はどれですか?

3つのテストケースが指定された入力を通過したが、テストケースが残っていないためコードに問題はないことを確認して確認しました。

私が使用すべき適切なデータタイプで案内してください。問題は、リンクの下に記載されている:

https://www.hackerearth.com/practice/data-structures/arrays/1-d/practice-problems/algorithm/monk-and-lucky-minimum-3/

コード:

#include <stdio.h> 
#include<stdlib.h> 
size_t a[100001]={0}; 
int main() 
{ 
    int test_no,i; 

    scanf(" %d",&test_no); 
    for(i=0;i<test_no;i++) 
    { 
     int j,n ; 
     size_t x,min; 
     scanf(" %d",&n); 
     for(j=0;j<n;j++) 
     { 
      scanf(" %zu",&x); 
      a[x]++; 
      if(j==0) 
      { 
       min=x; 
      } 
      if(x<=min) 
      { 
       min=x; 
      } 
     } 
     if(a[min]%2==0 && a[min]!=0) //In case if every integer occurs only once so all entries of count will be 0 , so he'll be unlucky 
     { 
      printf("Unlucky \n"); 
     } 
     else 
     { 
      printf("Lucky \n") ; 
     } 
    } 

    return 0; 
} 
+2

通常の4バイトの 'int型あなたの問題は大丈夫です。あなたの問題は、 'a [x]'に数字xの出現を格納することですが、リンクによれば、それぞれの 'x'(またはそれが置かれるごとにAᵢ)は109になることができます配列の次元は105です。 (ヒント:ここでは配列は必要ありません。なぜなら、minium要素の出現を追跡する必要があるからです。) –

+1

テストケース間で 'a'をクリアしません。恐ろしいです。 – unwind

+0

'a'はなぜグローバルなのですか? – CinCout

答えて

3

long long少なくとも64ビット符号付きの型であり、その大きさの数を記憶することができるより。

最新のCコンパイラ(C99以降)がそれをサポートする必要があります。

(ところで、あなたが最小または最大値を計算するために、アレイ内のすべての数字を維持する必要はありません - むしろあなたが現在達成両極端を保存することができます。)

+1

完全性のために:https://stackoverflow.com/a/6155838/8051589 –

+0

@AndreKampling:興味深いリンクですが、C++の重要な相違点に注意してください14: 'signed char' *は2の補数でなければなりません。それが署名されている場合は「char」。 – Bathsheba

+0

@Bathsheba 2補完ではないシステムをプログラミングしましたか? –

関連する問題