#17455: 為何 WA?


aaron1005.huang@gmail.com (Aaron Huang)

學校 : 中原大學
編號 : 89263
來源 : [223.140.238.45]
最後登入時間 :
2022-02-03 16:47:49
d124. 3的倍数 | From: [140.122.107.164] | 發表日期 : 2019-04-12 19:21

以下是我的程式碼:

 

#include<stdio.h>
#include<string.h>
char c[100000000];

int main(){
   long long int l,i,a,sum=0;

   // l 是字串長度, i 是給for迴圈使用, a 是字串元素運算後的佔存值, sum 是每個位數的總和
   while(scanf("%s",&c)!=EOF){
      l=strlen(c);
      sum=0;
      for(i=0;i<l;i++){
        a=c[i]-'0';
        sum+=a;
      }
      if(sum%3==0&&sum!=0){
        printf("yes\n");
      }else{
        printf("no\n");
      }
  }
}

 

最後WA(line:2)

求解???

 
#17457: Re:為何 WA?


freedom501999@gmail.com (帥氣魔方生)

學校 : 不指定學校
編號 : 88611
來源 : [39.8.203.54]
最後登入時間 :
2019-05-30 22:56:25
d124. 3的倍数 | From: [125.224.166.227] | 發表日期 : 2019-04-12 21:00

 


1.   while(scanf("%s",&c)!=EOF){

2.    if(sum%3==0&&sum!=0){

第一點,字元陣列的記憶體位址,可以直接用該變數名字代表

例如 char c[100000000]; 的 c ,這個 c 就可以當作陣列的記憶體開頭位址

所以要改成   while(scanf("%s", c)!=EOF)

                                              ^- 這裡不需要 & 

或著改成    while(scanf("%s", &c[0])!=EOF) 代表開頭位址

 

第二點,範例測資的 0 輸出是 yes ,所以應該改成  if(sum%3==0) 就可以

 
#17557: Re:為何 WA?


aaron1005.huang@gmail.com (Aaron Huang)

學校 : 中原大學
編號 : 89263
來源 : [223.140.238.45]
最後登入時間 :
2022-02-03 16:47:49
d124. 3的倍数 | From: [58.114.70.124] | 發表日期 : 2019-04-21 12:29

 


1.   while(scanf("%s",&c)!=EOF){

2.    if(sum%3==0&&sum!=0){

第一點,字元陣列的記憶體位址,可以直接用該變數名字代表

例如 char c[100000000]; 的 c ,這個 c 就可以當作陣列的記憶體開頭位址

所以要改成   while(scanf("%s", c)!=EOF)

                                              ^- 這裡不需要 & 

或著改成    while(scanf("%s", &c[0])!=EOF) 代表開頭位址

 

第二點,範例測資的 0 輸出是 yes ,所以應該改成  if(sum%3==0) 就可以

感謝!!!!!


 
ZeroJudge Forum