登录

在这个站点登录

保存我的登录记录

<<忘记密码?

还没有账号?点此注册>>

Jerry

有问题的里程表

分享到:

本文已被浏览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;
}

这两种方法应该都是可以的,第一种方法是模拟的方法,通过在程序内部进行模拟这个过程,从而将每一个里程数都对应到正确的里程数上,从而得知正确的里程数;第二种方法是找寻其中的数学原理后直接进行计算,这样的方法会更加的快捷和方便,但是思考量比较大.

 手机扫描左边的二维码,立刻将文章收入手机!
 微信扫描左边二维码,点击右上角即可分享到朋友圈!
严禁任何非授权的采集与转载,转载须经站长同意并在文章显著位置标注本文连接,站长保留追究法律责任的权利.

评论

 您需要 先登录 才可以回复.