有问题的里程表
本文已被浏览4713次
张老大今天在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;
}
这两种方法应该都是可以的,第一种方法是模拟的方法,通过在程序内部进行模拟这个过程,从而将每一个里程数都对应到正确的里程数上,从而得知正确的里程数;第二种方法是找寻其中的数学原理后直接进行计算,这样的方法会更加的快捷和方便,但是思考量比较大.
评论
您需要 先登录 才可以回复.