-
微生物增殖
假設有兩種微生物 X 和 YX出生後每隔3分鐘分裂一次(數目加倍),Y出生後每隔2分鐘分裂一次(數目加倍)。
一個新出生的X,半分鐘之後吃掉1個Y,並且,從此開始,每隔1分鐘吃1個Y。
現在已知有新出生的 X=10, Y=89,求60分鐘後Y的數目。
如果X=10,Y=90 呢?
本題的要求就是寫出這兩種初始條件下,60分鐘後Y的數目。
題目的結果令你震驚嗎?這不是簡單的數字遊戲!真實的生物圈有着同樣脆弱的性質!也許因爲你消滅的那隻 Y 就是最終導致 Y 種羣滅絕的最後一根稻草!
請忍住悲傷,把答案寫在“解答.txt”中,不要寫在這裏!
- 答案:
0
94371840
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int x=10,y=90;
bool flag=0;
for(int i=1;i<=120;i++)
{
if(i%6==1)y-=x;
else if(i%2==1)y-=x;
if(y<=0)break;
if(i%6==0)x+=x;
if(i%4==0)y+=y;
}
printf("%d %d\n",x,y<=0?0:y);
return 0;
}
——————————————————————————————————————————————
-
古堡算式
福爾摩斯到某古堡探險,看到門上寫着一個奇怪的算式:
ABCDE * ? = EDCBA
他對華生說:“ABCDE應該代表不同的數字,問號也代表某個數字!”
華生:“我猜也是!”
於是,兩人沉默了好久,還是沒有算出合適的結果來。
請你利用計算機的優勢,找到破解的答案。
把 ABCDE 所代表的數字寫出來。
答案寫在“解答.txt”中,不要寫在這裏!
- 答案:
21978
#include<iostream>
#include<cstdio>
using namespace std;
int a[6];
bool flag=0;
bool vis[10];
void seek(int d)
{
if(flag)return;
if(d>=6){
if((a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4])*a[5]==(a[4]*10000+a[3]*1000+a[2]*100+a[1]*10+a[0])){
for(int i=0;i<5;i++)printf("%d",a[i]);//一定要放在裏面,不然還有a[i]被賦值
flag=1;
}
return;
}
for(int i=0;i<=9;i++){
if(!vis[i]){
if(i==0&&(d==0||d==4||d==5))continue;
a[d]=i;
vis[i]=1;
seek(d+1);
vis[i]=0;
}
}
}
int main()
{
seek(0);
return 0;
}
——————————————————————————————————————————————
-
取球遊戲
今盒子裏有n個小球,A、B兩人輪流從盒中取球,每個人都可以看到另一個人取了多少個,也可以看到盒中還剩下多少個,並且兩人都很聰明,不會做出錯誤的判斷。
我們約定:
每個人從盒子中取出的球的數目必須是:1,3,7或者8個。
輪到某一方取球時不能棄權!
A先取球,然後雙方交替取球,直到取完。
被迫拿到最後一個球的一方爲負方(輸方)
請編程確定出在雙方都不判斷失誤的情況下,對於特定的初始球數,A是否能贏?
程序運行時,從標準輸入獲得數據,其格式如下:
先是一個整數n(n<100),表示接下來有n個整數。然後是n個整數,每個佔一行(整數<10000),表示初始球數。
程序則輸出n行,表示A的輸贏情況(輸爲0,贏爲1)。
例如,用戶輸入:
4
1
2
10
18則程序應該輸出:
0
1
1
0注意:
請仔細調試!您的程序只有能運行出正確結果的時候纔有機會得分!
在評卷時使用的輸入數據與試卷中給出的實例數據可能是不同的。
請把所有函數寫在同一個文件中,調試好後,存入與【考生文件夾】下對應題號的“解答.txt”中即可。
相關的工程文件不要拷入。
源代碼中不能能使用諸如繪圖、Win32API、中斷調用、硬件操作或與操作系統相關的API。
允許使用STL類庫,但不能使用MFC或ATL等非ANSI c++標準的類庫。例如,不能使用CString類型(屬於MFC類庫)。
#include<iostream>
#include<cstdio>
using namespace std;
int n,a;
bool f[10005];
int b[4]={1,3,7,8};
void init()
{
f[1]=0;
for(int i=2;i<10000;i++){
for(int j=0;j<4;j++){
if(b[j]>=i)break;
if(f[i-b[j]]==0)f[i]=1;
}
}
}
int main()
{
init();
scanf("%d",&n);
while(n--){
scanf("%d",&a);
printf("%d\n",f[a]);
}
return 0;
}