04-狐狸吃兔子(C++)
生活随笔
收集整理的這篇文章主要介紹了
04-狐狸吃兔子(C++)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Problem
Description
狐貍吃兔子:某地有N個洞(0,1,2,3…,N-1),狐貍住第0號,狐貍每次從左向右搜索一次,搜索方法為:
正向搜索:先從1號洞,隔一個,搜索3號洞,然后隔兩個搜索6號洞,然后隔3個搜索10號洞,以此類推。
逆向搜索:先從N-1號洞,隔一個,搜索N-3號洞,然后隔兩個搜索N-6號洞,然后隔3個搜索N-10號洞,以此類推。
狐貍搜索過的洞兔子都不能住,請輸出兔子可以住的洞。
Input
一個正整數N,表示總的洞穴數量。
Output
第一行:兔子可以住的洞穴編號,以空格分隔。
第二行:兔子可以住的洞穴數量
Code
代碼一
使用malloc()進行動態內存分配,這種方法耗費空間。
#include<iostream> using namespace std;int main() {int N;//總的洞穴數量int s = 2;int count = 0;//記錄兔子可以住的洞的數量cin >> N;bool *flag=(bool*)malloc(N);//能存放N個元素的數組for (int i = 1; i < N; i++)flag[i] = true;//初始化為true,true表示狐貍沒有搜索過for (int i = 1, j = N - 1; i < N; i += s, j -= s,s++)//標記狐貍搜索過的洞{flag[i] = false;flag[j] = false;}for (int i = 2; i < N - 1; i++)//檢查哪些洞兔子可以住{if (flag[i] == true){count++;cout << i << ' ';//輸出兔子可以住的洞的編號} }cout << endl;cout << count << endl;return 0; }代碼二
利用循環,檢測每個洞穴 是否被正向搜索過 或者 是否被逆向搜索過。
#include<iostream> using namespace std;/* * 正向搜索到的洞穴編號(是一個累加的過程:1+2+3+4+...): * 1 * 1+2 = 3 * 1+2+3 = 6 * 1+2+3+4 = 10 * ... * 逆向搜索到的洞穴編號: * N-1 * N-1-2 = N-3 * N-1-2-3 = N-6 * N-1-2-3-4 = N-10 * ... */int main() {int N;//輸入的洞穴數量int count = 0;//記錄兔子可以住的洞的數量cin >> N;int d = 2;//步長for (int i = 1; i < N; i++){bool flag = true;for (int j = 1; j < N;)//正向搜索{if (j == i)//洞被狐貍搜索過,則flag置為false{flag = false;break;}if (j > i)//洞沒有被搜索過,提前結束,減少循環,減少運行時間break;j = j + d;//搜索到的下一個洞穴的編號d++;}if (flag == true) {//正向搜索沒有搜索過的洞穴,才檢查逆向搜索d = 2;for (int j = N - 1; j < N;)//逆向搜索{if (j == i){flag = false;break;}if (j < i)//j<i,洞沒有被搜索過,提前結束循環break;j = j - d;//搜索到的下一個洞穴的編號d++;}}d = 2;//重置步長if (flag == true) {count++;cout << i << ' ';}}cout << endl;cout << count << endl;return 0; }若有錯誤請留言。
總結
以上是生活随笔為你收集整理的04-狐狸吃兔子(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两将军问题和TCP三次握手
- 下一篇: 云南各地代表性方言辞典