在作者写pta的过程中遇到了很多问题,也得到了很多感悟,比如说下面这道题。
给你一个正整数,请你判断它是不是3的倍数?
输入格式:
输入数据有一个T(T<=50),代表有T组数据
对于每组数据,一个整数n (1<=n<=101000) 注意数据范围
这个题需要知道一个数能被3整除的特殊性质,即每一位数字的和能够被3整除,该数字就能被3整除。
输出格式:
对于每组数据,输出一行“YES”或“NO”(不包括引号),代表这个数是或不是3的倍数
输入样例:
在这里给出一组输入。例如:
2
33332
123
输出样例:
在这里给出相应的输出。例如:
NO
YES
作者在写这道题的过程中首先想到的就是通过取余来得到所输入的数各位数字的和,经过在devC++上面的操作也证明了可行性。
#include<stdio.h>
int main()
{
int arr[50];
int a,b,c,d,sum,T;
scanf("%d",&T);
for(a=0;a<T;a++)
{
scanf("%d",&arr[a]);
}
for(b=0;b<T;b++)
{
sum=0;
while(arr[b]!=0)
{
sum=arr[b]%10+sum;
arr[b]/=10;
}
if(sum%3==0) printf("YES\n");
else printf("NO\n");
}
}
在pta上面运行测试的结果也一样,但是提交的时候系统却显示了错误,之后作者选择尝试使用字符的方式进行运算
#include<stdio.h>
#include<string.h>
int main()
{
int T,b,i,j,sum;
char a[10001];
scanf("%d",&T);
for(i=0;i<T;i++)
{
sum=0;
scanf("%s",&a);
b=strlen(a);
for(j=0;j<b;j++)
{
sum=sum+a[j];
}
if(sum%3==0) printf("YES\n");
else printf("NO\n");
}
return 0;
}
经过尝试之后,成功提交,也希望pta的出题人能够暗示一些答题方向,不然很容易让答题者怀疑人生,比如说作者我