1. 程式人生 > >noj算法 踩氣球 回溯法

noj算法 踩氣球 回溯法

需要 規則 using 遊戲 要求 col names 註意 lar

描述:

六一兒童節,小朋友們做踩氣球遊戲,氣球的編號是1~100,兩位小朋友各踩了一些氣球,要求他們報出自己所踩氣球的編號的乘積。現在需要你編一個程序來判斷他們的勝負,判斷的規則是這樣的:如果兩人都說了真話,數字大的人贏;如果兩人都說了假話,數字大的人贏;如果報小數字的人說的是真話而報大數字的人說謊,則報小數字的人贏(註意:只要所報的小數字是有可能的,即認為此人說了真話)。

輸入:

輸入為兩個數字,0 0表示結束;

輸出:

輸出為獲勝的數字。

輸入樣例:

36 62 49 343 0 0

輸出樣例:

62 49

代碼:

#include <iostream>
#include 
<string.h> #include <stdio.h> using namespace std; int f1=0,f2=0; void dfs(int n,int m,int f) { if(f1) return; if(n==1&&m==1){ f1=1; return; } if(m==1) f2=1; while(f>1){ if(n%f==0) dfs(n/f,m,f-1); if(m%f==0) dfs(n,m/f,f-1
); f--; } } int main() { int n,m=0; while(cin>>n>>m){ if(n==0&&m==0) break; int t=0; if(m>n){ t=n;n=m;m=t; } f1=0; f2=0; dfs(n,m,100); if(f1==0&&f2) cout<<m<<endl;
else cout<<n<<endl; } return 0; }

noj算法 踩氣球 回溯法