投币式自动寄存柜

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
int main(){
  int n,a[100][100],count=0,code_s[100][4],i,xiangzi[100],book,j,sl,sm;
  char request[100];
  srand((unsigned)time(NULL));
  scanf("%d",&n);
  getchar();
  for(i=1;i<=n;i++)
  xiangzi[i]=0;
  M:while(1){
    gets(request);
    //如果输入exit,结束程序; 
    if(strcmp(request,"exit")==0){
	 	printf("结束程序\n");
	 	break;
	 }
     //如果输入help; 
     if(strcmp(request,"help")==0){
     	printf("显示帮助信息\n");
     	continue;
	 }
	 //如果输入show;
	 if(strcmp(request,"show")==0){   
	 for(i=1;i<n;i++)
	 printf("%d",i);
	 printf("%d\n",n);
	 for(i=1;i<=n;i++){
	 	if(xiangzi[i]==0)
	 	printf("o");
	 	else printf(".");
	 }
	 printf("\n");
	 continue;	
	 }
	 //如果输入coin;
	 if(strcmp(request,"coin")==0){ 
		 for(i=1;i<=n;i++)
		 	if(xiangzi[i]==0)
		 	break;
		 if(i>n){       //如果i>n,则没有一个箱子是空的; 
		 printf("本柜已满\n");
		 continue;
		 }
		 else xiangzi[i]=1;  //否则将选中的箱子标记为1,即箱子非空 
		 book=0;
	 	S:while(1){
	 		code_s[i][book]=rand()%10;
	 		book++;              //产生4位数密码 
	 		if(book==4){
			 for(sl=1;sl<=n;sl++)  //sl标记箱子标号,sm标记每个非空箱子的密码的位的下标 
			 	if(xiangzi[sl]==1&&sl!=i){
			 		for(sm=0;sm<4;sm++)
			 			if(code_s[sl][sm]!=code_s[i][sm])
			 			break;
					 if(sm==4){
					 	book=0;
					 	goto S;    //如果随机产生的密码和已经有的密码重复,则重新生成 
					 }
				 }  //到此,产生可行的密码; 
	 		break;
			 }
		 }
		 printf("请取密码纸:(%d,",i);
		 for(book=0;book<4;book++)
		 printf("%d",code_s[i][book]);
		 printf(")\n");   //打印密码条; 
		 continue;
	 }
	 //输入的是密码; 
	 for(i=1;i<=n;i++){
	 	for(j=0;j<4;j++)
	 		if(request[j]-'0'!=code_s[i][j])
	 		break;
		 if(j==4){   //j=4说明密码符合 
	 			printf("谢谢惠顾,%d号\n",i);
	 			xiangzi[i]=0;   //取走东西后箱子标记为空 
				 goto M;
			 }
	 }
	 //如果能到达下面一步,说明以上步骤均不符合; 
	printf("密码错误\n");
  }
	return 0;
} 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值