AC代码:
建议先看后文的WA代码
#include <stdio.h>
#include <string.h>
int main(){
int t,rear,sum,n;
scanf("%d",&n);
while(n--){
getchar();
char num[10];
scanf("%s",num);
rear=num[strlen(num)-1]-'0';
sum=0;
int a[31]={0};
for(int i=0;i<31;i++){
t=i+1;
if(!((t-1)%10==rear||(t+1)%10==rear)){
a[i]=1;
}
if(i<28)
sum+=a[i];
}
sum*=12;
sum+=(7*(a[28]+a[29]+a[30]));
sum+=(4*(a[28]+a[29]));
printf("%d\n",sum);
}
return 0;
}
WA代码:
#include <stdio.h>
int main(){
int t,num,rear,sum,n;
scanf("%d",&n);
while(n--){
getchar();
scanf("鄂A%d",&num);
getchar();
rear=num%10; //车牌号尾号;
sum=0;
int a[31]={0};
for(int i=0;i<31;i++){
t=i+1; //t为真正的日期,从1号开始,而i从0开始
if((t-1)%10==rear||(t+1)%10==rear){ //如果日期尾号+1或者-1等于车牌尾号
a[i]=0;
}
else
a[i]=1;
if(i<28) //包含28天前,每月能通行的次数;
sum+=a[i];
}
sum*=12; //一共12个月的28天;
sum+=(7*(a[28]+a[29]+a[30])); //其中7个月有31天
sum+=(4*(a[28]+a[29])); //其中4个月30天;
printf("%d\n",sum);
}
return 0;
}
wrong answer的这段代码,其实能能得出正确结果的,但不知道为什么oj上一直无法通过,必须输入整个车牌号scanf("%s",num)
到字符串才算正确,而scanf("鄂A%d",&num)
即便答案正确,也无法的通过。
另附:
时间复杂度n3的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};//表示12个月
int main() {
int n,i,j,count;
scanf("%d",&n);
char a[1000];
while(n--)
{
scanf("%s",a);
int len=strlen(a);
count=0;
for(i=0;i<12;i++)
{
for(j=1;j<=month[i];j++)//对一年365天逐天扫描
{
if((a[len-1]-'0')==(j-1)%10||(a[len-1]-'0')==(j+1)%10)
{
count++;//记录不能行车的天数
}
}
}
printf("%d\n",365-count);
}
return 0;
}