T1 郭远摘苹果
郭远有一天走到了一片苹果林,里面每颗树上都结有不同数目的苹果,郭远身上只能拿同一棵树上的苹果,他每到一棵果树前都会把自己身上的苹果扔掉并摘下他所在树上的苹果并带走(假设郭远会走过每一棵苹果树),问在郭远摘苹果的整个过程中,他身上携带的最多苹果数与最小苹果数的差是多少?
输入
第 1 行读入 n,m(即苹果林中有果树的行数和列数,(100<n,m≤10);
接下来 n 行,每行读入 m 个整数(即每颗树上的苹果数);
输出
1 个数字(郭远摘苹果的整个过程中,他身上携带的最多苹果数与最小苹果数的差)
#include <iostream>
using namespace std;
int main()
{
int a,b,c,nnax=-114514,nnin=114514;
cin>>a>>b;
for (int i=1;i<=a*b;i++)
{
cin>>c;
nnax=max(nnax,c);
nnin=min(nnin,c);
}
cout<<nnax-nnin;
return 0;
}
T2 求各个科目成绩的平均分
请从键盘读入一个整数 n(≤100),代表一个班级同学的人数,然后读入 n 个人的语文、数学、英语成绩。
请求出这 n 个人的语文、数学、英语三科成绩的平均分分别是多少,结果保留 1 位小数。
输入
第 1 行:一个整数 n ,代表班级的人数。
第 2 行~第 n+1 行,输入 nn 个同学的语文、数学、英语成绩,每行输入一个同学的成绩,成绩用空格隔开!
输出
输出语文、数学、英语三科的平均成绩,分别用空格隔开,平均成绩保留 1 位小数!
#include<bits/stdc++.h>
using namespace std;
int main(){
double a,b,c;
int n;
double ans1=0,ans2=0,ans3=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a>>b>>c;
ans1+=a;
ans2+=b;
ans3+=c;
}
printf("%.1lf %.1lf %.1lf",ans1/n,ans2/n,ans3/n);
return 0;
}
T3 输出杨辉三角的前N行
输出杨辉三角的前 N 行( N<10 )。
输入
输入只有一行,包括 1 个整数 N 。
输出
输出只有 N 行。
#include <bits/stdc++.h>
using namespace std;
const int mx=22;
int n,a[mx][mx],r,c;
void pp(){
for (int r=1; r<=n; r++){
for (int c=1; c<=r; c++) cout<<a[r][c]<<' ';
cout<<endl;
}
}
int main(){
cin>>n;
for (r=1;r<=n;r++){
a[r][1]=a[r][r]=1;
for (c=2; c<=r-1; c++)
a[r][c]=a[r-1][c-1]+a[r-1][c];
}
pp();
return 0;
}
T4 地雷数量求解
为了保证边境重要的军事基地不会被敌人入侵,我军在敌军的必经之路上埋了 x 颗地雷,已知这片必经之地是 n×m 的方阵形状,为了让我们的友军知道哪些地方是有地雷的,我军工兵绘制了一张地雷分布图。在这张分布图中,如果某个点没有地雷,那么这个点所标记数字的各个位之和会是一个偶数;反之如果该点有地雷,这个点所标记数字的各个位之和是一个奇数。
请你编程计算出,该区域总共埋了多少颗地雷。
比如:下方有一张 5×6 的地雷分布图,其中埋有地雷的区域用灰色背景做了标记,该区域中共有 16 颗地雷。
输入
第一行有两个整数 n 和 m ,分别代表地图的大小有 n 行 m 列( n 和 m 都是 10∼100 之间的整数);
接下来 n 行,每行有 m 个整数,代表是否有地雷的标记数(这些标记数都是 ≤100000 的整数)
输出
一个整数,代表该区域总共埋了多少颗地雷。
#include <iostream>
#include <vector>
using namespace std;
int countMines(int n, int m, const vector<vector<int>>& grid) {
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int sum = 0;
int num = grid[i][j];
while (num > 0) {
sum += num % 10;
num /= 10;
}
if (sum % 2 != 0) {
count++;
}
}
}
return count;
}
int main(){
int n, m;
cin >> n >> m;
vector<vector<int>> grid(n,vector<int>(m));
for (int i=0;i<n;i++) {
for (int j=0;j<m;j++) {
cin>>grid[i][j];
}
}
int mineCount=countMines(n,m,grid);
cout<<mineCount<<endl;
return 0;
}
T5 图像相似度
问题描述
给出两幅相同大小的黑白图像(用 0−1 矩阵表示,0 代表白色,1 代表黑色)表示,求它们的相似度。
说明:若两幅图像在相同位置上的像素点颜色的值相同,则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。
比如:输入
2 2
1 0
0 1
1 1
1 1
数据解释:第一行的2 表示图像的尺寸是 2 行,每行 2 个整数;接下来的两行数据 1 0 和 0 1 表示第一幅图片的数值,再接下来两行数据 1 1 和 1 1 表示第二幅图片的数值;
从数据上可以看出,两幅图片有 2 个数是相等的,因此两幅图片的相似度为 50%,实际输出不需要输出百分号,结果保留 2 位小数,因此实际输出 50.00 。
#include<bits/stdc++.h>
using namespace std;
int main(){
const int nn=101;
int g1[nn][nn],g2[nn][nn];
int m=0,n=0,cnt=0;
cin>>m>>n;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>g1[i][j];
}
}
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>g2[i][j];
if(g1[i][j]==g2[i][j]){
cnt++;
}
}
}
double avg=cnt*1.0/(m*n)*100;
cout<<fixed<<setprecision(2);
cout<<avg<<endl;
return 0;
}
T6 求最大梯形的面积
问题描述
从键盘读入 n ( 3≤n≤100 )个梯形的上底、下底和高,请问这 nn 个梯形中,最大面积的梯形的面积是多少?(梯形面积的求解公式为 S = (a+b)×h/2 ,也就是 (上底+下底)×高/2 )
( 5.1.18)
输入
第 1 行为 1 个整数 n ,接下来 n 行每行 3 个整数分别代表梯形的上底、下底和高。
输出
最大面积梯形的面积(结果保留 1 位小数)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
double a,b,c,cnt,maxn=-9999;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a>>b>>c;
cnt=(a+b)*c*0.5;
if(cnt>maxn) maxn=cnt;
}
printf("%.1lf",maxn);
return 0;
}