📄 guessnumber.c
字号:
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
#include "math.h"
#define X 50
int main(void)
{
char c[X];
char A[X]="abcdefghij";
int i,j,k,x,R;
int m=strlen(A);
int n=0;
/*A为要随机取字符的数组,m为要随机取字符的数组的长度,n为要随机取字符的个数,
x为中间变量,有时用来存放随机取到的1个数,有时用来存放临时字符数据.*/
time_t t;
srand((unsigned) time(&t));
/*产生随机数的时候用时刻变化着的时间t来控制产生的随机数序列在每次运行的时候都不一样。*/
while(n<=0)
{
printf("随机数发生器将从%s中为您随机取字符。\n",A);
printf("请输入您要随机取的字符的个数(>0的整数):");
scanf("%s",c);
n=atoi(c);
};
char B[n],C[n],d[n];
/*B为对比数组,用来存放随机字符串,C为比较数组,用来存放输入的字符串,d为结果显示数组,用来存放判断结果,
其中1表示字符和位置都相同,0表示字符相同但位置不相同,空格表示字符和位置都不相同。*/
if(n>0)
{
printf("请选择要随机取的字符是否允许重复?\n1(允许);2(不允许)\n请选择:");
scanf("%d",&R);
if(R==1)
{
printf("\n随机产生的%d个字符分别为:",n);
for(j=0; j<n; j++)
{
x=rand()% m;
B[j]=A[x];
printf("%c",B[j]);
} /*如果允许重复,直接将A中以所取得的随机数为下标的字符存入另一数组B。*/
}
else if(R==2)/*如果不允许重复,则执行以下代码段*/
{
if(n<=m)
{
for(k=0,j=0;j<n;)
{
x=rand()% m;
if(k==0)
{
d[j]=x;
B[j]=A[x];
j=1;
k=1;/*将k设置为0之外的任意数值,用来区别是否为第1次取字符。*/
}
/*如果是第1次取数,直接将A中以所取得的随机数为下标的字符存入另一数组B,然后更新已取字符个数,将已取字符个数置为1。*/
for(i=0;i<=j;i++)
{
if(d[i]==x)
break;
if(d[i]!=x&&i==j)
{
d[i]=x;
j++;
B[j-1]=A[x];
break;
}
/*判断随机取到的数是否重复,如果重复则跳出循环,如果不重复,
判断是否已与全部已取得的随机数比较完毕,如果比较完毕的话,然后更新已取字符个数,
将A中以所取得的随机数为下标的字符存入另一数组B中。*/
}
}
printf("\n随机产生的%d个字符分别为:",n);
for(i=0;i<n;i++)
printf("%c",B[i]);
}
else
{
printf("输入错误!\n您要取的字符个数>数组中字符个数,因此所取的字符不可能不重复。\n");
exit(0);
}
}
else
{
printf("输入错误!\n");
exit(0);
}
}
/*初始化对比数组B,用来存放随机取到的字符串*/
printf("\n要对比的字符串为:");
for(j=0; j<n; j++)
printf("%c",B[j]);
printf("\n备注:比较结果中1表示字符和位置都相同,0表示字符相同但位置不相同。\n");
while(1)
{
printf("\n请输入%d个字符进行比较:",n);
scanf("%s",C);
for(j=0; j<n; j++)
d[j]=' ';/*初始化结果显示数组*/
for(i=0;i<n;i++)/*具体的字符和位置的比较,将相应位置设置为1或0。*/
{
if(B[i]==C[i])/*判断字符和位置是否都相同,都相同结果显示数组中标志为1。*/
d[i]='1';
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(B[i]==C[j])/*如果字符相同且已标志为1,则与跳出本次循环,用下一个进行比较;如果字符相同但未标志为1,则标志为0。*/
{
if(d[i]=='1')
{
i++;
continue;
}
else
{
d[i]='0';
}
}
} /*内层for循环结束。*/
}/*外层for循环结束。*/
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(d[i]<d[j])
{
x=d[i];
d[i]=d[j];
d[j]=x;
}
}
/*对结果显示数组中的1、0和空格进行具体的排序(从大到小),
要求显示格式:1在前,0在后,空格在最后但是显示不出来。*/
printf("比较结果:");
for(i=0;i<n;i++)
printf("%c",d[i]);
for(i=0;i<n;i++)
{
if(d[i]=='1'&&i==(n-1))
{
printf("\n恭喜您!输入正确!\n");
exit(0);
}
else
{
if(d[i]=='1')
continue;
}
} /*判断是否全为1*/
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -