运动会发奖章问题

ustc 2002-04-03 09:56:01
运动会连续开了n天,一共发了m枚奖章,第一天法1枚并剩下(m-1)枚的1/7,第二天法2枚并剩下的1/7,以

后每天按此规律发奖章,在最后一天即第n天发了剩下的n枚奖章。
问,运动会开了多少天? 一共发了几枚奖章?
...全文
90 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ustc 2002-04-03
  • 打赏
  • 举报
回复
讨论及扩展:

题目:
运动会连续开了n天,一共发了m枚奖章,第一天法1枚并剩下(m-1)枚的1/7,第二天法2枚并剩下的1/7,以

后每天按此规律发奖章,在最后一天即第n天发了剩下的n枚奖章。
问,运动会开了多少天? 一共发了几枚奖章?

猜想:
设第k天发k枚并剩下的1/num,则有如下猜想: n =num-1, m=n*n; (a)

证明:
证明猜想正确即要验证这个猜想是否符合题目要求。

由猜想,m=(num-1)(num-1)= num*num -2 num+1 , num-1;
那么
第一天: 应发出 1+ (num*num - 2num)/num = 1 + num-2 枚
剩下 num*num - 3num +2 枚
第二天: 应发出 2+ (num*num - 3num)/num = 2 + num-3 枚
剩下 num*num - 4num +3 枚
......
由此猜想有关系式:
第k天: 应发出 k + num - (k+1) 枚
剩下 num*num -(k+2)num + (k+1) 枚 (b)
利用数学归纳法来证明(b)
第k+1天: 应发出 k+1 + (num*num - (k+2)num)/num = k+1 num - (k+2) 枚
剩下 num*num - (k+3)num + (k+2) 枚 解
从而知道猜想的关系式(b)成立。
下面验证(a)满足题意要求,即第n天(即第num-1天)发了剩下的n枚(即num-1枚)。
由(b)知道:
第num-2天: 剩下 num*num - (num+1)num + num = num -1 枚
第num-1天: 应发出 num+1 + num -(num-1+1) = num-1 枚
剩下 0 枚。
由此验证了猜想(a)的正确性,它是本题的一个解。 证毕#。

解答:
由猜想,知道当num=7时, n=6, m=6*6=36
tpProgramer 2002-04-03
  • 打赏
  • 举报
回复
/*
由于题中涉及m-1的1/7,于是m-1应是7的倍数,即m=7*x+1。递推x,寻找m,n。
*/



#include<iostream>
#include<math.h>

usingnamespacestd;

voidCaculate_Two();

voidmain()
{
Caculate_Two();
cin.get();
}


constlongDIV_NUM=7;

//穷举x,n求得题目的解
voidCaculate_Two()
{
for(intx=1;;x++)
{
intm=DIV_NUM*x+1;//总奖章数m
for(intn=1;;n++)//天数n,看看此时m是不是满足题中每天分配奖牌的条件
{
m-=n;
if(m%DIV_NUM==0)
{
m=m-m/DIV_NUM;
if(m==0)
{
cout<<"Answer:n="<<n<<""<<"m="<<DIV_NUM*x+1<<endl;
return;
}
}else
break;
}
}
}

//输出
Answer:n=6m=36

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧