今天的內(nèi)容就是做一個小demo拷邢,詳細(xì)講解如下
小demo簡述
1:請輸入?yún)⑴c人數(shù) 比如輸入7
2:每個人就編一個號
3:請輸入殺人編號比如 3
4: 沒死的人 只要報到3的人就死 直接輸出最后沒死的人的編號
#include<stdio.h>
#include<stdlib.h>
#define KILLED 0//宏定義(取別名):想給一個特殊的數(shù)字 字符串 表達式 以特殊的意義時屎慢,就取個別名瞭稼。注意這里沒有分號
//好處1:增強可讀性 2:更方便改變 可操作性更強
int main (void){
/*//先輸入一個數(shù)字
//然后利用循環(huán)給數(shù)組每個元素賦值
//輸入殺人編號
//for循環(huán)腻惠,拿掉第三個數(shù),當(dāng)最后的數(shù)組元素個數(shù)變成1時集灌,輸出這個元素
int shuru = 0;
scanf("%d",&shuru);
int a[shuru];
for(int i = 0;i < shuru;i++){
a[i] = i+1;
}
for(int i = 0;i < shuru;i++){
printf("%d ",a[i]);
}
int naqu = 0;
scanf("%d",&naqu);
while(1){
//int del(int a[],int n, int x)//刪除長度為n的數(shù)組中值為x的元素
int del(int a[],int n, int x)//刪除長度為n的數(shù)組中值為x的元素
}
//12457*/
int count ;//保存輸入的人數(shù)
int num[90] = {};//保存每個人的編號
int killNum;//被殺的人的編號
printf("請輸入?yún)⑴c人數(shù):");
scanf("%d",&count);
//開始編號
for(int i = 0;i < count ;i++){
num[i] = i+1;
}
printf("請輸入殺人的編號:");
scanf("%d",&killNum);
//開始游戲 比如1234567 去掉3后 后面依次往前面替換 成了1245677 但是效率低复哆,頻繁地刪除/增加 但是可以將被選中的數(shù)賦值為0 比如 1204507
int current = 0;//記錄當(dāng)前報數(shù)的位置
int totalKilled = 0;//記錄當(dāng)前死亡人數(shù)
for(int i = 0;i < count;i++){
if(num[i] != KILLED){ //可能以前已經(jīng)死的人 又被殺死了
current++;
} /*else{
printf("這是已經(jīng)死亡的編號%d",num[i]);
continue;
} *///問題所在
//判斷當(dāng)前編號是不是死亡編號
if(current == killNum){
printf("被殺死的人是:%d\n",num[i]);
//殺掉
num[i] = KILLED; //這里弄成KILLED,就是能讓別人看懂
current = 0;//還原current
totalKilled++;
//當(dāng)還剩一個的時候就退出循環(huán)
if(totalKilled == count - 1){
break;
}
}
//判斷是否到末尾
if(i == count - 1){
i = -1;//這一點很重要梯找,一開是沒想出來。命名為-1
}
}
for(int i = 0;i < count;i++){
printf("%d ",num[i]);//最后再輸出一下
}
system("pause");
return 0;
}
下面是自己課下寫的
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main (void){
//輸入?yún)⑴c人數(shù)
//給每一個參與的人附上編號
//輸入殺人編號3
//依次顯示被殺死的人的編號
//將最后的數(shù)組顯示出來
printf("游戲開始\n");
Sleep(2000);
system("cls") ;
int count;//記錄參與人數(shù)
int a[500] = {};
int current = 0;
int killed = 0;//記錄殺人編號
int totalkilled = 0;//記錄總共被殺死的人锈锤,這一點尤為重要,后來自己寫的時候忘了
scanf("%d",&count);
for(int i = 0;i < count;i++){
a[i] = i + 1;
printf("%d",a[i]);
}//給每個人附上編號
printf("\n");
printf("請輸入殺人編號:");
scanf("%d",&killed);//輸入殺人編號
for(int i = 0;i < count;i++){
if(a[i] != 0){
current++;
}
if(killed == current){
printf("被殺死的人是:%d\n",a[i]);
a[i] = 0;
current = 0;//將次序歸為0
totalkilled++;
if(totalkilled == count - 1){//這里不能用while因為while也是一個循環(huán)久免,用break是退出它的循環(huán)而不是退出外面的for循環(huán)
break;
}
}
if(i == count - 1){
i = -1;
}
}
for(int i = 0;i < count;i++){
printf("%d",a[i]);
}
system("pause");
return 0;
}
總結(jié):
今天倒是沒有學(xué)什么新知識扭弧,只是在老師帶領(lǐng)下做了一個小demo阎姥,但是在做的過程中有很多收獲鸽捻,尤其在課下再做一遍的時候呼巴,會遺忘很多步驟和思路(具體見上面代碼的注釋)這時再和老師寫的代碼做對比就會找到很多問題泊愧。還有一個很大的收獲就是在寫小demo的過程中要在最上面以注釋的形式把所有的步驟一步一步地寫出來伊磺,這樣便于使我的思路清晰屑埋,知道下一步需要干什么
課下作業(yè)
游戲:
猜數(shù)字 游戲開始 產(chǎn)生四個0-9之間的不重復(fù)的從小到大排序的數(shù)字。
比如 2348
請輸入猜測數(shù)字 :
如果猜測的數(shù)字正確且位置正確 那么輸出A 數(shù)字正確 位置不正確 B
比如 2589 則輸出1A1B