1.耶稣有13個門徒,其中有一個就是出賣耶稣的叛徒,請用排除法找出這位叛徒:13個人圍坐一圈,從第一個人開始循環報數,數到三排除,最後剩下的人就是叛徒
int people[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
int count = 0;//用來記錄報數
int number = 13;//記錄活著的人數
int i = 0;//記錄第幾個人正在報數
while (number > 1) {
if (people[i] != 0) {
count++; //如果a[i ]沒有被剔除掉,報數有效
} if (count == 3) {
people[i] = 0;//剔除掉,
count = 0;//報數清零
number--;//存活人數減一
}
i++;//記錄報數的下一個人
if (i == 13) {
i = 0;// 當超出范圍時,立即將報數人數置為第一人
}
} for (int i = 0; i < 13; i++) {
if (people[i] > 0) {
printf("叛徒是第%d人 ", people[i]);
}
}
2.有1000000個數,每個數的取值范圍都是0~999999,找出其中重復的數
#define COUNT 1000000
int main(void)
{
inta[COUNT] = {0};
for (int i = 0; i < COUNT; i++) {
int number = arc4random()%COUNT;//把隨機數作為下標,值作為出現次數
a[number - 1] ++;
}
//輸出重復的數字以及重復次數
for(int i = 0 ;i < COUNT;i++){
if (a[i] > 1) {
printf("%d repeats %d times/n",i+1,a[i]);
}
}
return0;
}