复习与测试

第1题     自定义函数&结构体

运行下面的程序。
输入 :

3

1  3  7

输出结果为:

9

图片.png

第2题     巧克力 查看测评数据信息

王老师所在的信息学小班有 2 个班,一班和二班,一班共有A 人,二班共有 B 人。王老师去超市给小朋友们采购巧克力,她的采购计划是:

1、给每个班采购的巧克力的数量要正好能够平均分给该班级的所有同学;

2、两个班要购买一样多的巧克力;

3、在满足前两个条件的基础上,尽可能少买巧克力。

请编程帮助王老师计算出,她至少要买多少个巧克力。

输入格式

输入两个整数 A和 B ,用一个空格隔开。

输出格式

输出王老师最少要购买巧克力的数量。

输入/输出例子1

输入:

4 6

输出:

24

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;
    cout<<a*b/__gcd(a,b)*2;
    
    return 0;
}

第3题     相邻 查看测评数据信息

在一场模拟游戏中,每一位同学都有一个能力值,能力值的大小直接决定了同学们在这场游戏中的闯关能力。现在同学们在操场上排成了一个 n 行 m 列的队形,假设这个队形中所有人能力值都不同,那么给定 2 个能力值后,请你编程判断,这 2 个能力值对应的同学是否相邻?

相邻的定义是:如果两个同学在上下左右的位置是挨在一起的,那么就算是相邻的。

比如:如下是一个 3 行 4 列的队形,这个队形中每个数字代表了每个同学的能力值。

8 2 3 4

5 6 7 1

9 10 11 12

那么这个队形中,能力值 6 和能力值 10 两个值就是相邻的。

输入格式

第 1行有 2 个整数 n 和 m ,分别代表队形的行和列的值( 2≤n,m≤200)

接下来 n 行,每行有 m 个整数,代表每个同学的能力值(每个同学的能力值的值在 1∼100 之间)

最后一行输入 2个整数,代表 2 个不同能力值的值。

输出格式

如果两个能力值的值是相邻的,请输出字符 Y ,否则请输出字符 N 。

输入/输出例子1

输入:

3 4

8 2 3 4

5 6 7 1

9 10 11 12

6 10

输出:

Y

#include<bits/stdc++.h>
using namespace std;
long long n,m,a[1005][1005],x,y;
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    cin>>x>>y;
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=m;j++){
        	if(a[i][j]==x){
                if(a[i+1][j]==y){cout<<'Y';return 0;}
                if(a[i-1][j]==y){cout<<'Y';return 0;}
                if(a[i][j+1]==y){cout<<'Y';return 0;}
                if(a[i][j-1]==y){cout<<'Y';return 0;}
            }
    	}
    }
    cout<<'N';
    return 0;
}

第4题     传信 查看测评数据信息

经过模拟战斗,小蓝丢失了A城,于是决定启用新武器,小红的侦察兵意外得知了该新武器的数量及存放地点,现在要将信息秘密传送回指挥部。为了提高信息传送的安全性,数据都是经过加密的。

其中新武器的数量是这样子加密的:侦察兵送回一个正整数n个和一个正整数m,指挥部的信息部要删除整数n各个位上的某m个数字,使得剩下的数字按原顺序组成的新整数最大,剩下的数字之和即为新武器的数量。     
    比如n=2314,m=1,可以证明删除数字2后,314是最大的数字,那么新武器的数量为3+1+4=8。 
    你能帮指挥部快速获取新武器的实际数量吗?

输入格式

1行,两个整数n,m(10<=n<=10^100 , 1<=m<=100,数据保证m小于n的位数)。

输出格式

一个整数,表示新武器的实际数量。

输入/输出例子1

输入:

1258  1

输出:

15

输入/输出例子2

输入:

62561  2

输出:

13

#include<bits/stdc++.h>
using namespace std;
string s;
int m;
int main(){
    cin>>s>>m;
    for(int i=1;i<=m;i++){
        for(int j=0;j<s.size()-1;j++){
            if(s[j]<s[j+1]){
                s.erase(j,1);
                break;
            }
        }
    }
   int ans=0;
    for(int i=0;i<s.size();i++){
        ans+=s[i]-'0';
    }
    cout<<ans;
    return 0;
}

第5题     素数求和问题 查看测评数据信息

现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和。

输入格式

第一行给出整数M(0<M<10)代表多少组测试数据
每组测试数据第一行给你N,代表该组测试数据的数量。
接下来的N个数为要测试的数据,每个数小于1000000

输出格式

每组测试数据结果占一行,输出给出的测试数据的所有素数和。

输入/输出例子1

输入:

3
5
1 2 3 4 5
8
11 12 13 14 15 16 17 18
10
21 22 23 24 25 26 27 28 29 30

3

5

1 2 3 4 5

8

11 12 13 14 15 16 17 18

10

21 22 23 24 25 26 27 28 29 30

输出:

10

41

52

#include<bits/stdc++.h>
using namespace std;
int prime(int n){
    int j=1;
    if(n<2)j=0;
    else if(n==2)j=1;
    else
        for(int i=2;i<=sqrt(n);i++){
            if(n%i==0){
                j=0;
                break;
            }
        }
    return (j);
}
long long a,b,c,sum,s[1010];
int main(){
   scanf("%d",&a);
   while(a--){
       sum=0;
       scanf("%d",&b);
       for(c=0;c<b;c++){
   	   		scanf("%d",&s[c]);if(prime(s[c])==1)sum+=s[c];
   		}
	   printf("%d\n",sum);
   }
   return 0;
}

第6题     混合牛奶 查看测评数据信息

由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要。帮助 Marry 乳业找到最优的牛奶采购方案。

Marry 乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是不同的。此外,就像每头奶牛每天只能挤出固定数量的奶,每位奶农每天能提供的牛奶数量是一定的。每天 Marry 乳业可以从奶农手中采购到小于或者等于奶农最大产量的整数数量的牛奶。

给出 Marry 乳业每天对牛奶的需求量,还有每位奶农提供的牛奶单价和产量。计算采购足够数量的牛奶所需的最小花费。

注:每天所有奶农的总产量大于 Marry 乳业的需求量。

输入格式

第一行二个整数 n,m,表示需要牛奶的总量,和提供牛奶的农民个数。  

接下来 m 行,每行两个整数 pi,ai,表示第 i 个农民牛奶的单价,和农民 i一天最多能卖出的牛奶量。

输出格式

单独的一行包含单独的一个整数,表示 Marry 的牛奶制造公司拿到所需的牛奶所要的最小费用。

输入/输出例子1

输入:

100 5

5 20

9 40

3 10

8 80

6 30

输出:

630

样例解释

【数据范围】 对于 100% 的数据:

 0 ≤ n,ai ≤2×1000000 , 0≤m≤5000 , 0≤pi≤1000

#include<bits/stdc++.h>
using namespace std;
struct node{
    int x;
    int y;
}a[5005];
int n,m,ans;
bool cmp(node p,node q){
    if(p.x==q.x) return p.y>q.y;
    return p.x<q.x;
} 
int main(){
    scanf("%d %d",&n,&m);
    for(int i=1;i<=m;i++)scanf("%d %d",&a[i].x,&a[i].y);
    sort(a+1,a+m+1,cmp);
    int t=1;
    while(n){
        if(a[t].y!=0){
            a[t].y--;
            ans+=a[t].x;
            n--;
        }
        else t++;
    }
    printf("%d",ans);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值