投多個色子,求色子點數和出現最多的是多少次。
/**
* 投色子,使用遞歸
*/
#include<stdio.h>
#include <vector>
using namespace std;
int n; //n個色子
int time[100]; //點數出現的次數
void tou(int ith, int cnt){ //投第ith個色子,上幾個色子投的和是多少
if(ith > n){ //最後一個色子統計出現的次數
time[cnt]++;
return ;
}
for(int i = 1; i <= 6; i++){
tou(ith + 1, cnt + i);
}
}
int main(){
printf("請輸入色子的個數1-12:");
scanf("%d", &n);
tou(1, 0);
//打印每個點數和出現的次數
for(int i = n; i <= n * 6; i++){
printf("%d: %d\n",i, time[i]);
}
//統計色子中點數和的最大值
int maxn = 0;
for(int i = n; i <= n * 6; i++){
maxn = max(maxn, time[i]);
}
vector<int>ans;
for(int i = n; i <= n * 6; i++){
if(maxn == time[i])
ans.push_back(i);
}
//打印哪個點出現的次數最多
printf("答案爲:\n");
for(int i = 0; i < ans.size(); i++){
printf("%d ", ans[i]);
}
return 0;
}