// yundonghui.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
#define Fenmu 7 //定义每一天发放奖牌中从剩余部分来源的几分之一。如此处为“7”即为“1/7”
//递归函数,nMedalSum为第N天奖牌的总数,包括当天分发的和剩余的两部分之和
int nMedalSum(int i,int n) //i表示第i天,n表示共n天
{
int result=0;
if (i == n) {
result=Fenmu-1; //最小为6
}else{
result=(nMedalSum(i+1,n)*Fenmu/(Fenmu-1)+i); //第i天的奖牌总数=7/6*第i+1天奖牌总数+i
}
return result;
}
void main()
{
int n=Fenmu-1; //运动会连续持续天数(初值最小为6)
int m; //奖牌总数
for (int i=1; i<=n; i++)
{
//当天的奖牌总数必须被分母减一整除,以合乎题意,作为头天剩余奖牌数
if ( nMedalSum(i,n)%(Fenmu-1)==0){
if(n==i){
break;
}
}
else{
//一旦发现有余数,则当前天数不合法,天数需加分母减一
n=n+Fenmu-1;
}
}
cout << "/**************************/" << endl;
cout << "/* GOLD MEDAL PROBLEM */" << endl;
cout << "/* 杨瑞 2012年3月13日 */" << endl;
cout << "/**************************/" << endl << endl;
cout<< "运动会连续召开" << n << "天" << ",共有金牌" << nMedalSum(1,n) << "块。" << endl << endl;
cout<< "具体分发情况如下所示:"<< endl << endl;
for(int i=1;i<=n;i++){
cout << "第"<< i << "天发奖牌数为" << i << "+" << (nMedalSum(i,n)-i)/7 << "块,剩余" << (nMedalSum(i,n)-i)/7*6 << "块"<< endl;
}
cout << endl;
system("pause");
}
评论0