有问题的里程表
本文已被浏览4058次
张老大今天在ACM发了个新题,感觉还是蛮有(jian)意(dan)思的:
现在分享代码出来.
#include <stdio.h> #include <stdlib.h> //从倒序数组获取数字 int getNumber(char *Bitch){ char resort[10]; int i; for(i=0;i<strlen(Bitch);i++){ resort[i]=Bitch[strlen(Bitch)-i-1]; } return atoi(resort); } //将数字转为倒序数组 void toString(int num,char *output){ int i=0; while(num!=0){ output[i]=num%10+'0'; i++; num/=10; } output[i]=0; } //进位并除去4 void sortBitch(char *Bitch){ int i=0; while(Bitch[i]!=0){ if(Bitch[i]>'9'){ if(Bitch[i+1]<'0'){ Bitch[i+1]='0'; } Bitch[i+1]++; Bitch[i]-=10; } if(Bitch[i]=='4'){ Bitch[i]++; } i++; } Bitch[i]=0; } //倒序数组累加 void stringAdd(char *Bitch){ Bitch[0]++; sortBitch(Bitch); } int main() { int Real,iBitch; char Bitch[10]={0},VirtualBitch[10]={'0'}; scanf("%d",&iBitch); toString(iBitch,Bitch); //模拟行驶 for(Real=0;getNumber(VirtualBitch)<iBitch;Real++,stringAdd(VirtualBitch)); printf("%dn",Real); return 0; }
然而正确的标准答案是:
#include<stdio.h> int main(){ int num,j,flag,i; scanf("%d",&num); for(i=num;i>=4;i--){ j=i; flag=0; while(j){ if(j%10==4){ flag=1; break; } j /=10; } if(flag){ num-- } } printf("%dn",num); return 0; }
这两种方法应该都是可以的,第一种方法是模拟的方法,通过在程序内部进行模拟这个过程,从而将每一个里程数都对应到正确的里程数上,从而得知正确的里程数;第二种方法是找寻其中的数学原理后直接进行计算,这样的方法会更加的快捷和方便,但是思考量比较大.
评论
您需要 先登录 才可以回复.