https://www.codechef.com/problems/LCOLLISscanf文でのみ "%d"の代わりに "%1d"を使用するとどのような違いがありますか?
私はcodechefで上記の問題を解決していましたが、以下のコードを書きましたが、ランタイムエラー(SIGSEVG)が表示されました。
#include<stdio.h>
int main(void)
{
int t, n, m;
scanf("%d", &t);
while(t--)
{
scanf("%d %d", &n, &m);
int a[10][10], i, j, sum, ans;
for(i = 0; i < n; i++)
{
for(j = 0; j < m; j++)
scanf("%d", &a[i][j]);
}
ans = 0;
for(i = 0; i < m; i++)
{
sum = 0;
for(j = 0; j < n; j++)
{
if(a[j][i] == 1)
sum++;
}
if(sum > 1)
ans = ans + (sum * (sum - 1))/2;
}
printf("%d\n", ans);
}
return 0;
}
そして、ちょっと違うだけで私と全く同じ解決策の1つを見て受け入れました。コードは次のとおりです。
#include<stdio.h>
int main(void)
{
int t, n, m;
scanf("%d", &t);
while(t--)
{
scanf("%d %d", &n, &m);
int a[10][10], i, j, sum, ans;
for(i = 0; i < n; i++)
{
for(j = 0; j < m; j++)
scanf("%1d", &a[i][j]); // SEE RIGHT HERE ITS JUST A 1 BEFORE d
}
ans = 0;
for(i = 0; i < m; i++)
{
sum = 0;
for(j = 0; j < n; j++)
{
if(a[j][i] == 1)
sum++;
}
if(sum > 1)
ans = ans + (sum * (sum - 1))/2;
}
printf("%d\n", ans);
}
return 0;
}
ここで、1はすべての違いを作ります。 誰か助けてください。
'%d 'は' int'を読み取り、 '%1d'は1桁を読み取っています –
マニュアルページをお読みください。 googleのmanページも検索してください。 –
これは間違った答えを与えていますが、 'n'や' m'が10より大きい場合を除き、なぜSIGSEGVを与えるのか分かりません。 –