問題描述:
圍繞著山頂有10個洞,一只狐狸和一只兔子住在各自的洞裡。狐狸想吃掉兔子。一天,兔子對狐狸說:“你想吃我有一個條件,先把洞從1-10編上號,你從10號洞出發,先到1號洞找我;第二次隔1個洞找我,第三次隔2個洞找我,以後依次類推,次數不限,若能找到我,你就可以飽餐一頓。不過在沒有找到我以前不能停下來。”狐狸滿口答應,就開始找了。它從早到晚進了1000次洞,累得昏了過去,也沒找到兔子,請問,兔子躲在幾號洞裡?
分析:
我們設定一個數組a[11],用來表示這10個山洞(a[0]不使用),並且初始化為0(數組元素值為0表示該洞穴狐狸沒有進入過),然後用多次循環模擬狐狸找兔子的過程,狐狸找兔子的循環肯定是有一個有限循環,我們不妨設置為1000,因為狐狸找了1000次還找不到兔子的話,早就累死了=.=
然後,這10個山洞是圍成了一個圈的,所以是在循環訪問數組中的內容,用除n取余來限制。
程序代碼:
#include<iostream>
using namespace std;
int main(){
int a[11]={0};
int i=0,k=0;
int n=10;
for(i=1;i<=1000;i++){ //設定循環的次數,也就是狐狸找兔子的次數
k=(k+i)%n; //因為洞穴圍成了一個圈
if(k==0)k=n; //當k為0的時候,說明可以整除
a[k]=1; //將數組值設置為1,表示這個洞狐狸已經進入過了
}
for(i=1;i<=n;i++){
if(a[i]!=1){
cout<<"\n洞穴"<<i<<"安全"<<endl;
}
}
cout<<endl;
return 0;
}
運行界面: