小 难点:多个相等,如何输出序号最小者
暴力法
for(int i=3;i<=80;i++){
if (cont[i] > maxn) {
maxn= cont[i];
ans= i;
#include<iostream>
#include<algorithm>
using namespace std;
int cont[85];
int main()
{
int a, b, c, sum = 0;
cin >> a >> b >> c;
for (int i = 1; i <= a; i++)
{
for (int j = 1; j <= b; j++)
{
for (int k = 1; k <= c; k++)
{
sum = i + k + j;
cont[sum]++;
}
}
}
int maxn = 0,ans=0;
for(int i=3;i<=80;i++){
if (cont[i] > maxn) {
maxn= cont[i];
ans= i;
}
}
cout <<ans;
}
数学规律法
掷两个骰子(正方体的那种),两个人分别对两个骰子的点数之和进行猜测,谁猜对了谁赢。而他发现:在这样的规则下,猜7胜率最高。
若有两个骰子,它们的面数分别为 a,b(a≤b),则可以得出以下结论:
不同的点数之和的情况总数为 a+b-1,从小到大具体是 2,3,4,…,a+b;
点数之和出现次数最多的是 1+a,1+a+1,1+a+2,…,1+b,且总共有 b-a+1个出现次数最多的和;
#include<iostream>
#include<math.h>
using namespace std;
void swap(int &x,int &y)
//swap必须加上&取地址才能真正交换,类型必须写void
{ int t=x; x=y; y=t; }
int main()
{
int a,b,c;
cin>>a>>b>>c;
if(a<b) swap(a,b);
if(b<c) swap(b,c);
if(a<b) swap(a,b);
//冒泡排序
if(b<=a-c+1)
cout<<1+b+c;
else
cout<<2+a+(b-a+c-1)/2;//int除法自动下取整
return 0;
}