一、難點:
1.???產(chǎn)生隨機數(shù):??srand((unsigned?int)time(NULL));????int?temp=rand()%10;(產(chǎn)生10以內(nèi)的隨機數(shù)。)
2.?插入排序:????產(chǎn)生的數(shù)字和j對應(yīng)的數(shù)字一個一個進(jìn)行比較,如果發(fā)現(xiàn)temp
3.?產(chǎn)生隨機數(shù)過程中的邏輯思維和循環(huán)嵌套。定義布爾類型判斷產(chǎn)生的隨機數(shù)是否重復(fù)??并考慮最內(nèi)層循環(huán)結(jié)束出現(xiàn)的兩種結(jié)果!(此處為重點)(1)重復(fù)->break?(2)比完了?j==i?->結(jié)束了?沒有重復(fù)。
二、程序:
1、#import?
int?main(int?argc,?const?char?*?argv[])?{
int?num[]?=?{3,0,1,8,7,2,5,4,6,9};
//冒泡排序?通過一次排序?最大的沉底
/*
for?(int?i?=?0;?i?<?10;?i++){//比較的次數(shù)
for?(int?j?=?0;?j?<?10-i-1;?j++){
if?(num[j]?>?num[j+1])?{
//交換j和j+1的值
int?temp?=?num[j+1];
num[j+1]?=?num[j];
num[j]?=?temp;
}
}
}
*/
//選擇排序?一次取出一個值?默認(rèn)他是最小的
//如果發(fā)現(xiàn)比這個數(shù)小?就交換
//遍歷整個數(shù)組?找到一個最小的
//3,0,1,2,5,4,6
/*
for?(int?i?=?0;?i?<?10-1;?i++){
//默認(rèn)這是最小的
//int?min?=?num[i];//3
for?(int?j?=?i+1;?j?<?10;?j++){
//控制用min和后面的每一個進(jìn)行比較
if?(num[i]?>?num[j]){
//j對應(yīng)的數(shù)字比min還小?交換
int?temp?=?num[i];
num[i]?=?num[j];
num[j]?=?temp;
}
}
//一次遍歷之后找到最小的值min
//num[i]?=?min;
}
*/
//插入排序
for?(int?i?=?0;?i?<?10;?i++)?{
//讓i和i+1比較大小
if?(num[i]?>?num[i+1])?{
//交換值
int?temp?=?num[i];
num[i]?=?num[i+1];
num[i+1]?=?temp;
//讓num[i]和前面的所有進(jìn)行比較
for?(int?j?=?i;?j?>?0;?j--){
if?(num[j]?<?num[j-1])?{
temp?=?num[j];
num[j]?=?num[j-1];
num[j-1]?=?temp;
}
}
}
}
for?(int?i?=?0;?i?<?10;?i++)?{
printf("%d?",?num[i]);
}
printf("\n");
return?0;
}
2、/*
隨機產(chǎn)生4個不重復(fù)的 0-9 之間的整數(shù)
從小到大排序
輸入猜測的數(shù)字 1 2 3 4
A表示數(shù)字正確 位置正確的個數(shù) 2A
B表示數(shù)字正確 位置不正確 2B
1.如何產(chǎn)生隨機數(shù)
? ? //放種子
? ? srand((unsigned int)time(NULL));
? ? //產(chǎn)生隨機數(shù) num % 10? 0 ... 9
? ? rand() % (max+1);
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
//初始化數(shù)組
void initArray(int array[]);
//打印數(shù)組內(nèi)容
void show(int array[]);
int main(int argc, const char * argv[]) {
? ? //定義一個數(shù)組 用于存放產(chǎn)生的隨機數(shù)
? ? int originArray[4] = {};
? ? //初始化數(shù)組
? ? initArray(originArray);
? ? //打印
? ? show(originArray);
? ? return 0;
}
//初始化數(shù)組
//1 2 1
void initArray(int array[]){
? ? srand((unsigned int)time(0));
? ? for (int i = 0; i < 4; i++) {
? ? ? ? int temp = 0;
? ? ? ? bool isExist = false;
? ? ? ? while(1){
? ? ? ? ? ? //產(chǎn)生一個隨機數(shù)
? ? ? ? ? ? temp = rand() % 10;
? ? ? ? ? ? //1 2 3
? ? ? ? ? ? //判斷這個數(shù)字在數(shù)組里面是否存在
? ? ? ? ? ? //i表示當(dāng)前數(shù)組里面已經(jīng)存進(jìn)去幾個了
? ? ? ? ? ? for (int j = 0; j < i; j++){
? ? ? ? ? ? ? ? if (array[j] == temp) {
? ? ? ? ? ? ? ? ? ? //存在了
? ? ? ? ? ? ? ? ? ? isExist = true;
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? //什么情況下出來
? ? ? ? ? ? //1.break 2.遍歷完畢還沒找到相同
? ? ? ? ? ? if (isExist == false) {
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? //將這個隨機數(shù)添加到數(shù)組里面
? ? ? ? array[i] = temp;
? ? }
}
//打印數(shù)組內(nèi)容
void show(int array[]){
? ? for ( int i = 0; i < 4; i++) {
? ? ? ? printf("%d ",array[i]);
? ? }
? ? printf("\n");
}
3、/*
參數(shù)人數(shù):7
對每一個人從1開始編號?int
死亡號碼:3
報數(shù)?只要報道3的同學(xué)都死亡?后面的繼續(xù)從1開始報數(shù)
*/
#import?
#define?KILLED?-1
int?main(int?argc,?const?char?*?argv[])?{
int?total?=?0;
int?number[10]?=?{};
int?killNumber?=?0;
int?count?=?0;
int?totalKilledNumber?=?0;
printf("請輸入?yún)⑴c人數(shù):");
scanf("%d",?&total);
//給數(shù)組賦值?編號
for?(int?i?=?0;?i?<?total;?i++)?{
number[i]?=?i+1;
}
printf("請輸入死亡號碼:");
scanf("%d",?&killNumber);
//開始游戲了
for?(int?i?=?0;?i?<?total;?i++)?{
//判斷指向的這個人有沒有被殺掉
if?(number[i]?!=?KILLED){
//報數(shù)
count?=?count?+?1;
}
//判斷當(dāng)前編號是不是到了死亡號碼
if?(count?==?killNumber){
//殺掉這個人
number[i]?=?KILLED;
//還原編號
count?=?0;
//死亡人數(shù)+1
totalKilledNumber?++;
//是不是該結(jié)束了
if?(totalKilledNumber?==?total-1){
break;
}
}
//判斷這一次循環(huán)是不是到末尾了
if?(i?==?total-1){
//讓i回到起始點
i?=?-1;?//防止++?導(dǎo)致回到第二個
}
}
printf("\n");
//測試一次之后的結(jié)果
for?(int?i?=?0;?i?<?total;?i++){
printf("%d?",?number[i]);
}
return?0;
}
三、感悟:
放棄是最簡單的,別看不起自己