分数统计
题目描述
有 n 个球队1≤n≤100 ,编号为1,2,…,n,共进行 n 场比赛。每场比赛有一个胜队。
计分方法如下:
是连胜中的第一次胜利,则本次胜利得 1 分。
是连胜中的第二次胜利,则本次胜利得 2 分。
是连胜中的第三次胜利,则本次胜利得 3 分。
连胜超过三次以上的胜场,每场得 3 分。
例如 n=12 ,比赛的胜队为 1 2 1 1 3 2 1 1 1 1 4 2,计分如下:
队1 1+1+2+1+2+3+3=13 分
队2 1+1+1=3 分
队3 1 分
队4 1 分
其余队为 0 分。
输入
读入 n,x1两个整数,n 为球队数,x1 为第一次胜队号
第 xi场比赛(i≥2)胜队的编号由以下公式确定:
xi = ( ( xi-1 * 3703 + 1047 ) mod n)+1
输出
一个整数,即得分最多队的分数。
#include <iostream>
using namespace std;
int main()
{
int n,cnt2[200],a[200],max,maxi,x[200],cnt,pr;
cin>>n>>x[0];
pr = 0;
max = 0;
cnt = 1;
for(int i = 0;i<n;i++)
{
cnt2[i] = 0;
}
for(int i = 0;i<n;i++)
{
x[i+1] = (x[i]*3703+1407)%n+1;
a[i] = x[i];
}
for(int i = 0;i<=n;i++)
{
if(a[i]==pr)
{
cnt++;
}
else
{
for(int j = cnt;j>=1;j--)
{
cnt2[pr] = cnt2[pr]+j;
}
cnt = 1;
}
pr = a[i];
}
for(int i = 0;i<n;i++)
{
if(max<cnt2[i])
{
max = cnt2[i];
maxi = i;
}
}
cout<<max;
return 0;
}
连胜统计
题目描述
在篮球比赛中,连胜是一件让球迷非常兴奋的事情。现给出n场比赛的获胜队伍编号,请输出每个球队连胜的场数,
要求至少连胜2场才能列入统计范围。
比如,输入获得胜利的球队编号为:9 9 1 2 2 2 9 9 3 3 3 2,那么输出结果如下
输出的含义是: 9 号球队连胜 2 场、 2 号球队连胜 3 场、 9 号球队连胜
2 场、 3 号球队连胜 3 场。
输入
第 1 行有一个整数 n ,代表比赛的场数。( 5≤n≤100 )
第 2 行有 n 个整数,分别代表了每场比赛获得胜利的球队的编号。(球
队编号在 1,109 范围内)
输出
输出若干行,每行 2 个整数,按照读入的顺序输出获得连胜的球队的编
号以及连胜的场次。
#include <iostream>
using namespace std;
int main()
{
int n,a[200],max,maxi,cnt,pr;
cin>>n;
pr = 0;
max = 0;
cnt = 1;
for(int i = 0;i<n;i++)
{
cin>>a[i];
}
for(int i = 0;i<=n;i++)
{
if(a[i]==pr)
{
cnt++;
}
else
{
if(cnt>1)
{
cout<<pr<<" "<<cnt<<endl;
}
cnt = 1;
}
if(cnt>max)
{
max = cnt;
maxi = a[i];
}
pr = a[i];
}
return 0;
}
连续非素数的最大长度
题目描述
给出一个正整数 n ( 2≤n≤1000000 ),例如 n=30 ,在1,2,3,…30 中,连续的非素数有:
4长度为 1
6 长度为 1
8 9 10 长度为 3
12 长度为 1
14 15 16 长度为 3
18 长度为 1
20 21 22 长度为 3
24 25 26 27 28 长度为5
30 长度为 1
其中,最大长度为 5 ,即有连续的5 个非素数。
输入
一个整数 n 。
输出
一个整数,即连续非素数最大长度
#include <iostream>
using namespace std;
bool a[1000100];
int main()
{
int prn = -1;
int n,max,maxi,cnt;
cin>>n;
max = 0;
cnt = 1;
a[0] = 1;
a[1] = 1;
a[2] = 0;
a[3] = 0;
a[4] = 1;
a[5] = 0;
a[6] = 1;
a[7] = 0;
a[8] = 1;
a[9] = 1;
a[10] = 1;
for(int i = 2;i<33;i++)
{
if(a[i]==0)
{
int j = 2;
while(i*j<=1000)
{
a[i*j] = 1;
j++;
}
}
}
for(int i = 34;i<1000;i++)
{
if(a[i]==0)
{
int j = 2;
while(i*j<=1000000)
{
a[i*j] = 1;
j++;
}
}
}
for(int i = 2;i<=n;i++)
{
if(prn==a[i]&&a[i]==1)
{
cnt++;
}
else if(a[i]==0)
{
cnt = 0;
}
else
{
cnt = 1;
}
if(cnt>max)
{
max = cnt;
}
prn = a[i];
}
cout<<max;
return 0;
}