C语言:下面描述的题目咋编程?
小明捡到了一个手机,屏幕点亮后需要输入解锁密码才能开锁。手机的解锁密码由8个数字组成,每个数字可能是0-9中的一个,且8个数字互不相同
小明的破解思路非常简单,暴力。他会从最小的数字开始一个一个尝试。 比如第一次尝试01234567,第二次尝试01234568,直到98765432......
几个小时过后,小明终于.........把手机按没电了。
没电前,小明已经按破解思路尝试了多组答案,他只记得最后一组尝试的是什么 问,小明已经尝试了多少组
2)输入输出:
输入格式
一个8位的数,可能有前导0
输出格式
一个整数,表示答案 展开
代码文本:
#include "stdio.h"
char repeat(char *p,char n){//重复检查
char i;
for(i=0;i<n;i++)
if(p[n]==p[i])
return 0;
return 1;
}
char check(char *p){//检查输入是否正确
char i,n;
for(n=0;p[n];n++);
if(n==8){
for(i=1;i<n;i++)//检查
if(!repeat(p,i))
return 0;
return 1;
}
return 0;
}
int main(int argc,char *argv[]){
char s[9]="",t[9]="",i,d=58;
int n;
printf("Please enter the last set of number(L:8,0~9, no repeat)...\n");
if(scanf("%[0-9]s",t)==1 && check(t)){
for(n=0,s[0]='0';s[0]<d;s[0]++)
for(s[1]='0';s[1]<d;s[1]++)
if(repeat(s,1))
for(s[2]='0';s[2]<d;s[2]++)
if(repeat(s,2))
for(s[3]='0';s[3]<d;s[3]++)
if(repeat(s,3))
for(s[4]='0';s[4]<d;s[4]++)
if(repeat(s,4))
for(s[5]='0';s[5]<d;s[5]++)
if(repeat(s,5))
for(s[6]='0';s[6]<d;s[6]++)
if(repeat(s,6))
for(s[7]='0';s[7]<d;s[7]++)
if(repeat(s,7)){
for(n++,i=0;i<8;i++)
if(s[i]-t[i])
break;
if(i==8){
printf("\n%d\n",n);
return 0;
}
}
}
else
puts("Input error, exit...");
return 0;
}