简单模拟
题目怎么说你就怎么做
3n+1猜想:如果是偶数则砍掉一半,如果是奇数则把(3n+1)砍掉一半,对给定的任一不超过1000的正整数n,需要多少步才能得到n=1?
思路:读入n,用while反复判断n是否为1
如果为1,则退出循环
如果不为1,判断是否为偶数,n/2;如果为奇数,(3n+1)/2,然后令计数器step加1.
#include <iostream>
using namespace std;
int main() {
int n,step=0;
cin >> n;
while(n!=1){
if(n%2==0){
n/=2;
}else{
n=(3*n+1)/2;
}
step++;
}
cout << step;
return 0;
}
挖掘机技术哪家强
输入:第一行给出不超过
的正整数N,即参赛人数。随后N行每行给出一位参赛者的信息和成绩,包括其代表的学校的编号以及比赛成绩,中间以空格分隔。
输出:一行中给出得分总分最高的学校编号及分数,中间以空格分隔。
思路:令数组school[maxn]记录每个学校的总分,初值为0.对每一个读入的学校schID与其对应的分数score,令school[schID]+=score
令k记录最高总分学校编号,MAX记录最高总分,初值为-1.枚举1~N,不断更新k和MAX
#include <stdio.h>
#include <iostream>
using namespace std;
const int maxn = 100010;
int main() {
int school[maxn]={0},N,schID,score;
cin >> N;
for(int i=0;i<=N;i++){
scanf("%d %d\n", &schID, &score);
school[schID]+=score;
}
int k=0, MAX=-1;
for(int i=0;i<=N;i++){
//注意接下来k并不参与运算;
if(school[i]>=MAX){
MAX=school[i];
k=i;
}
}
cout << k << " " << MAX;
return 0;
}