青少年软件编程C++一级题库

185 阅读18分钟

1 、计算 (a+b)/c 的值 给定 3 个整数 a、b、c,计算表达式(a+b)/c 的值,/是整除运算。 输入: 输入仅一行,包括三个整数 a、b、c, 数与数之间以一个空格分开。(-10,000 < a,b,c < 10,000, c 不等于 0) 输出: 输出一行,即表达式的值。 样例输入 1 1 3 样例输出

#include<iostream>
using namespace std;
int main(){
    int a,b,c;
    cin>>a>>b>>c;
    cout<<(a+b)/c;
    return 0;
}

2 、反向输出一个三位数( 2020 年真题) 将一个三位数反向输出。 输入: 一个三位数 n。 输出: 反向输出 n。 样例输入 100 样例输出 001

#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    cout<<n%10<<n/10%10<<n/100;
    return 0;
}

3 、打印字符 输入一个 ASCII 码,输出对应的字符。 输入 一个整数,即字符的 ASCII 码,保证存在对应的可见字符。 输出 一行,包含相应的字符。 样例输入 65 样例输出 A

#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    cout<<(char)n;
    return 0;
}

4 、输出保留 12 位小数的浮点数 读入一个双精度浮点数,保留 12 位小数,输出这个浮点数。 输入: 只有一行,一个双精度浮点数。 输出: 也只有一行,保留 12 位小数的浮点数。 样例输入 3.1415926535798932 样例输出 3.141592653580

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
    double f;
    cin>>f;
    cout<<fixed<<setprecision(12)<<f;
    return 0;
}

5 、判断能否被 3 , 5 , 7 整除 给定一个整数,判断它能否被 3,5,7 整除,并输出以下信息: 1、能同时被 3,5,7 整除(直接输出 3 5 7,每个数中间一个空格); 2、只能被其中两个数整除(输出两个数,小的在前,大的在后。例如:3 5 或者 3 7 或者 5 7,中间用空格分隔); 3、只能被其中一个数整除(输出这个除数); 4、不能被任何数整除,输出小写字符‘ n’,不包括单引号。 输入: 输入一行,包括一个整数。 输出: 输出一行,按照描述要求给出整数被 3,5,7 整除的情况。

#include <iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	if(n%3==0&&n%5==0&&n%7==0){
		cout<<3<<" "<<5<<" "<<7;
	}else if(n%3==0&&n%5==0){
		cout<<3<<" "<<5;
	}else if(n%3==0&&n%7==0){
		cout<<3<<" "<<7;
	}else if(n%5==0&&n%7==0){
		cout<<5<<" "<<7;
	}else if(n%3==0){
		cout<<3;
	}else if(n%5==0){
		cout<<5;
	}else if(n%7==0){
		cout<<7;
	}else{
		
		cout<<"n";
	}
	return 0;
}

6 、骑车与走路 在北大校园里,没有自行车,上课办事会很不方便.但实际上,并非去办任何事情都是 骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间.假设找到自行车, 开锁并车上自行车的时间为 27 秒;停车锁车的时间为 23 秒;步行每秒行走 1.2 米,骑车 每秒行走 3.0 米。请判断走不同的距离去办事,是骑车快还是走路快。 输入:输入一行,包含一个整数,表示一次办事要行走的距离,单位为米。 输出:输出一行,如果骑车快,输出一行"Bike";如果走路快,输出一行"Walk";如果一样 快,输出一行"All"。 样例输入 120 样例输出 Bike

#include <iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	double bs=n*1.0/3.0+50;
	double ws=n*1.0/1.2;
	if(bs<ws){
		cout<<"Bike";
	}else if(bs>ws){
		cout<<"Walk";
	}else{
		cout<<"All";
	}
 
	return 0;
}

7 、画矩形 根据参数,画出矩形。 输入: 输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于 3 行 不多于 10 行,宽不少于 5 列不多于 10 列);第三个参数是一个字符,表示用来画图的 矩形符号;第四个参数为 1 或 0,0 代表空心,1 代表实心。 输出:输出画出的图形。 样例输入 7 7 @ 0 样例输出 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @

#include<iostream>
using namespace std;
int main(){
	int g,k;
	char ch;
	int f;
	cin>>g>>k>>ch>>f;
	if(f==1){
		for(int i=0;i<k;i++){
			for(int j=0;j<g;j++){
				cout<<ch;
			}
			cout<<endl;
		}
	}else{
		for(int i=0;i<k;i++){
			for(int j=0;j<g;j++){
				if(i==0||i==k-1||j==0||j==g-1)
				      cout<<ch;
			    else
			          cout<<" ";
			}
			cout<<endl;
		}
	}
	return 0;
}

8 、含 k 个 3 的数 输入两个正整数 m 和 k,其中 1 < m < 100000,1 < k < 5 ,判断 m 能否被 19 整除,且恰好含有 k 个 3,如果满足条件,则输出 YES,否则,输出 NO。 例如,输入: 43833 3 满足条件,输出 YES。 如果输入: 39331 3 尽管有 3 个 3,但不能被 19 整除,也不满足条件,应输出 NO。 输入: m 和 k 的值,中间用单个空格间隔。 输出: 满足条件时输出 YES,不满足时输出 NO。 样例输入 43833 3 样例输出

#include<iostream> 
using namespace std;
int main(){
     int m, k, n, sum=0;
     cin >> m >> k;
     n = m;
     while (n>0){
        if (n%10==3) sum++;
        n/= 10;
     }
     if (m%19==0 && sum==k) 
	    cout << "YES" << endl;
    else 
	    cout << "NO" << endl;
    return 0;
}

9 、计算表达式的值 给定整数 x,y 的值,计算 3x+2y 的值。 输入 一行包括 2 个整数 x,y,以空格作为分隔。数据保证最后计算结果还在整数表示范围内。 (-10000<a,b,c<10000) 输出 按照题目要求输出结果。 样例输入 2 3 样例输出 12

#include<iostream>
using namespace std;
int main(){
    int x,y;
    cin>>x>>y;
    cout<<3*x+2*y;
    return 0;
}

10 、判断是否存在重复的数( 2019 年真题) 给定 3 个数,判断是否存在 2 个数相等,如果存在输出“YES”,否则输出“ NO”。 输入 一行,包括 3 个整数,以空格分隔。 输出 按照题目要求输出结果。 样例输入:2 7 2 样例输出:YES

#include<iostream>
using namespace std;
int main(){
    int a,b,c;
    cin>>a>>b>>c;
    if(a==b||b==c||a==c){
    	cout<<"YES"; 
	}else{
		cout<<"NO";
	}
    return 0;
}

11 、日期输出 给定两个整数,表示一个日期的月和日。请按照“ MM-DD”的格式输出日期,即如果 月和日不到 2 位时,填补 0 使得满足 2 位。 输入 2 个整数 m,d(0<m<=12,0<d<=31)。 数据保证日期合法。 输出 按照题目要求输出日期 样例输入 7 18 样例输出 07-18

#include<iostream> 
using namespace std; 
int main() { 
    int m,d; 
    cin>>m>>d; 
    if(m<10) cout<<"0"; 
    cout<<m<<"-"; 
    if(d<10) 
    cout<<"0"; 
    cout<<d; 
    return 0; 
}

12 、与指定数字相同的数的个数 输出一个整数序列中与指定数字相同的数的个数。 输入 输入包含 2 行:第一行为 N 和 m,表示整数序列的长度(N <= 100)和指定的数字,中间 用一个空格分开;第 2 行为 N 个整数,整数之间以一个空格分开。 输出 输出为 N 个数中与 m 相同的数的个数。 样例输入 3 2 2 3 2 样例输出 2

#include<iostream> 
using namespace std; 
int main() { 
    int N,m,k,sum=0; cin>>N>>m; 
    for(int i=1;i<=N;i++) { 
        cin>>k; 
        if(k==m)
            sum++;
     }
     cout<<sum; 
     return 0; 
 }

13 、输出第二个整数 输入三个整数,把第二个输入的整数输出。 输入 只有一行,共三个整数,整数之间由一个空格分隔。整数是 32 位有符号整数。 输出 只有一行,一个整数,即输入的第二个整数。 样例输入:123 456 789 样例输出:456

#include<iostream>
using namespace std;
int main(){
	int a,b,c;
	cin>>a>>b>>c;
	cout<<b;
}

14 、浮点数向零舍入 输入一个单精度浮点数,将其向零舍入到整数。 说明:向零舍入的含义是,正数向下舍入,负数向上舍入。 提示:可以使用强制类型转换来实现。 输入:一个单精度浮点数。 输出:一个整数,即向零舍入到整数的结果。 样例输入:2.3 样例输出:2

#include<iostream>
using namespace std;
int main(){
     float f;
     cin>>f;
     cout<<(int)f;
}

15 、计算 (a+b)*c 的值 给定 3 个整数 a、b、C,计算表达式(a+b)*c 的值。 输入 输入仅一行,包括三个整数 a、 b、 C,数与数之间以一个空格分开。(-10000<a, b, c<10000) 输出 输出一行,即表达式的值。 样例输入:2 3 5 样例输出:25

#include<iostream>
using namespace std;
int main(){
	int a,b,c;
	cin>>a>>b>>c;
	cout<<(a+b)*c;
}

16 、苹果和虫子 你买了一箱 n 个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每 X 小时能 吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过 y 小时你还有多 少个完整的苹果? 输入 输入仅一行,包括 n,X 和 y(均为整数)。输入数据保证 y<=n*X。 输出 输出也仅一行,剩下的苹果个数。 样例输入 10 4 9 样例输出 7

#include <iostream>
using namespace std;
int main(){
    int n,x,y;
    int m;
    cin>>n>>x>>y;
    if(y <= n * x){
	    m=y/x;
	    if(y%x>0)
	      cout<<n-m-1;
	    else
	      cout<<n-m;
	}else{
		cout<<0;
	}
    
    return 0;
}

17 、输出绝对值 输入一个浮点数,输出这个浮点数的绝对值。 输入 输入一个浮点数,其绝对值不超过 10000。 输出 输出这个浮点数的绝对值,保留到小数点后两位。 样例输入:-3.14 样例输出:3.14

#include<iostream>
#include<iomanip>
using namespace std;
int main(){
	float f;
	cin>>f;
	if(f<0){
		cout<<fixed<<setprecision(2)<<-f;
	}else{
		cout<<fixed<<setprecision(2)<<f;
	}
}

18 、计算邮资 根据邮件的重量和用户是否选择加急计算邮费。 计算规则: 重量在 1000 克以内(包括 1000 克),基本费 8 元。 超过 1000 克的部分每 500 克加收超重费 4 元,不足 500 克部分按 500 克计算;如果用户 选择加急,多收 5 元。 输入 输入一行,包含整数和一个字符,以一个空格分开,分别表示重量(单位为克)和是否加 急。 如果字符是 y,说明选择加急;如果字符是 n,说明不加急。 输出 输出一行,包含一个整数,表示邮费。 样例输入 1200 y

#include <iostream>
#include <iomanip>
using namespace std;
int main(){
   int x;
   char y;
   int z;
   cin>>x>>y;
   if(x<=1000){
   	  	z=8;
   }else{
	 if((x-1000)%500==0){
	 	z=8+(x-1000)/500*4;
	 }else{
	 	z=8+(x-1000)/500*4+4;
	 }
	  	
  }
  if(y=='y'){
  	z=z+5;
  }
  cout<<z;
 
	
	return 0;
}

19 、求整数的和与均值 读入 n(1<=n<=10000)个整数,求它们的和与均值。 时间跟制:1000 内存限制:65536 输入 输入第一行是一个整数 n,表示有 n 个整数。 第 2~n+1 行每行包含 1 个整数。 每个整数的绝对值均不超过 10000 输出 输出一行,先输出和,再输出平均值(保留到小数点后 5 位), 两个数用单个空格分隔。 样例输入:4 344 222 343 222 样例输出 1131 282.75000

#include <iostream> 
#include <cstdio> 
using namespace std; 
int main() { 
    int n,t,sum=0; 
    cin>>n; 
    for(int i=1;i<=n;i++) {
        cin>>t; sum=sum+t; 
    }
    cout<<sum<<" "; 
    printf("%.5f",sum*1.0/n); 
    return 0; 
}

20 、数 1 的个数 给定一个十进制正整数 n,写下从 1 到 n 的所有整数,然后数一下其中出现的数字 1 的个数。 例如: 当 n=2 时,写下 1,2。 这样只出现了 1 个 1; 当 n=12 时,写下 1,2,3,4,5,6,7,8,9,10,11,12。 这样出现了 5 个 1。 输入:正整数 n。1<=n<=10000。 输出:一个正整数,即 1 的个数。 样例输入 12 样例输出 5

#include <iostream> 
#include <cstdio> 
using namespace std;
int main() { 
    int n,t,sum=0; 
    cin>>n; 
    for(int i=1; i<=n; i++) { 
        t=i; 
        while(t!=0) { 
            if(t%10==1) 
                 sum++; 
                 t=t/10;
        } 
    }
    cout<<sum; return 0; 
}

21 、逻辑判断问题 输入三个数 a,b,c,输出最大者。

#include<iostream> 
using namespace std; 
int main() { 
    int a,b,c,max=0; 
    cin>>a>>b>>c; 
    max=a; //打擂法 
    if(b>max) 
        max=b; 
    if(c>max) 
        max=c; 
    cout<<max; 
    return 0; 
}

22 、 ASCII 码 输入一个字符,通过计算输出该字符的前一个字符和后一个字符。

#include<iostream> 
using namespace std; 
int main() { 
char n; 
cin>>n; 
cout<<char(n-1)<<" "<<char(n+1); 
return 0;  
}

23 、判断平闰年 判断闰年的规则:四年一闰,百年不闰, 四百年一闰。 输入的年份是闰年,则输出“YES”,否则输出“ NO”。

#include<iostream> 
using namespace std; 
int main() { 
int year; 
cin>>year; 
if(year%4==0&&year%100!=0||year%400==0) 
  cout<<"YES"; 
else 
  cout<<"NO"; 
return 0; 
}

24 、求最大公约数 输入两个整数后,求这两个整数的最大公约数。

#include <iostream> 
using namespace std; 
int main() { 
int m,n,k,i; 
cin>>m>>n; 
k=min(m,n); 
for(i=k; i>=1; i--) { //用最小数做循环次数 
	if(m%i==0&&n%i==0) { 
		cout<<i; 
		break; 
	} 
}
return 0; 
}

25 、分糖果游戏 有三个小朋友甲乙丙。甲有 50 粒糖果,乙有 43 粒糖果,丙有 13 粒糖果。现在他们做一个游戏。从甲开始,将自己的糖分三份,自己留一份,其余 两份分别给乙与丙,多余的糖果自己吃掉,然后乙与丙也依次这样做。问最后甲、乙、 丙三人各有多少粒糖果?

#include<iostream> 
using namespace std; 
int main() {
     int a=50,b=43,c=13; 
     a=a/3; 
     b=(a+b)/3; 
     c=(a+b+c)/3; 
     cout<<a<<" "<<b<<" "<<c; 
     return 0; 
 }

26 、自行车和三轮车 鸡兔同笼问题 某车棚存有自行车和三轮车共 65 辆,它 们的轮子数合计为 150 个,求该棚内存有的自行车和三轮车各是多少辆?

#include<iostream> 
#include<iomanip> 
using namespace std; 
int main() {
	int a=65,b=150; 
	int bike,sanlun; 
	sanlun=b-a*2; 
	bike=a-sanlun; 
	cout<<bike<<" "<<sanlun; 
	return 0; 
}

27 、数据分段问题 某市的士费起步价 8 元,可以行驶 3 公里。3 公里以后, 按每公里 1.6 元计算,输入的士的公里数,请你计算顾客需付费多少元?

#include <iostream> 
using namespace std; 
int main() { 
	int lc; 
	float fy; 
	cin>>lc; 
	if(lc<=3) 
	fy=8; 
	else
	fy=8+(lc-3)*1.6; 
	cout<<fy; 
	return 0;
 }

28 、字符菱形 给定一个字符,用它构造一个对角线长 5 个字符,倾斜放置的菱形。 输入:输入只有一行, 包含一个字符。 输出 该字符构成的菱形。 样例输入 * 样例输出 *




#include <iostream> 
using namespace std; 
int main() { 
	char a; 
	cin>>a; 
	cout<<" "<<" "<<a<<endl; 
	cout<<" "<<a<<a<<a<<endl; 
	cout<<a<<a<<a<<a<<a<<endl; 
	cout<<" "<<a<<a<<a<<endl; 
	cout<<" "<<" "<<a<<endl; 
	return 0;
}

29 、对齐输出 读入三个整数,按每个整数占 8 个字符的宽度,右对齐输出它们。 输入 只有一行,包含三个整数,整数之间以一个空格分开。 输出 只有一行,按照格式要求依次输出三个整数,之间以一个空格分开。 样例输入 123456789 0 -1 样例输出 123456789 0 -1

#include<iostream> 
#include<cstdio> 
using namespace std; 
int main() { 
int a,b,c; 
cin>>a>>b>>c; 
printf("%8d %8d %8d",a,b,c); 
return 0; 
}

30 、等差数列末项计算 给出一个等差数列的前两项 a1,a2,求第 n 项是多少。 输入 一行,包含三个整数 a1,a2,n。-100 <= a1,a2 <= 100,0 < n <= 1000。 输出 一个整数,即第 n 项的值。 样例输入:1 4 100 样例输出:298

#include<iostream> 
using namespace std; 
int main() { 
	int a1,a2,an,n; 
	cin>>a1>>a2>>n; 
	an=a1+(n-1)*(a2-a1); 
	cout<<an; 
	return 0; 
}

31 、计算线段长度 已知线段的两个端点的坐标 A( Xa,Ya),B( Xb,Yb),求线段 AB 的长度。 输入共两行。 第一行是两个实数 Xa,Ya,即 A 的坐标。 第二行是两个实数 Xb,Yb,即 B 的坐标。 输入中所有实数的绝对值均不超过 10000。 输出 一个实数,即线段 AB 的长度,保留到小数点后 3 位。 样例输入 1 1 2 2 样例输出 1.414 32 、计算 2 的幂 给定非负整数 n,求 2n。 输入 一个整数 n。0 <= n < 31。 输出 一个整数,即 2 的 n 次方。 样例输入 3 样例输出 8 33 、奇偶数判断 给定一个整数,判断该数是奇数还是偶数。 输入 输入仅一行,一个大于零的正整数 n。 输出 输出仅一行,如果 n 是奇数,输出 odd;如果 n 是偶数,输出 even。 样例输入 5 样例输出 odd 34 、分段函数 编写程序,计算下列分段函数 y=f(x)的值。 y=-x+2.5; 0 <= x < 5 y=2-1.5(x-3)(x-3); 5 <= x < 10 y=x/2-1.5; 10 <= x < 20 输入 一个浮点数 N,0 <= N < 20 输出 输出 N 对应的分段函数值:f(N)。结果保留到小数点后三位。 样例输入 1.0 样例输出 1.500 35 、银行利息 农夫约翰在去年赚了一大笔钱!他想要把这些钱用于投资,并对自己能得到多少收 益感到好奇。已知投资的复合年利率为 R( 0 到 20 之间的整数)。约翰现有总值为 M 的 钱( 100 到 1,000,000 之间的整数)。他清楚地知道自己要投资 Y 年(范围 0 到 400)。 请帮助他计算最终他会有多少钱,并输出它的整数部分。数据保证输出结果在 32 位有 符号整数范围内。 输入 一行包含三个整数 R,M,Y,相邻两个整数之间用单个空格隔开。 输出 一个整数,即约翰最终拥有多少钱(整数部分)。 样例输入内部资料 请勿外传 翻印必究 5 5000 4 样例输出 6077 提示 在样例中, 第一年后: 1.05 * 5000 = 5250 第二年后: 1.05 * 5250 = 5512.5 第三年后: 1.05 * 5512.50 = 5788.125 第四年后: 1.05 * 5788.125 = 6077.53125 6077.53125 的整数部分为 6077。 来源:USACO 2004 November 36 、财务管理 Larry 今年毕业并找到了一份工作。他赚很多钱,但似乎总是不够。Larry 认为他需 要控制他的投资以解决自己的财务问题。Larry 拿到了自己的银行账户详单,想看看自 己有多少钱。请帮助 Larry 写一个程序,通过过去 12 个月中每月的月末结余,计算平 均结余。 输入 输入包含 12 行,每行包含一个数,为某个月的结余。每个数都是不大于 1,000,000 的 正数,保留两位小数,省略""符。输出输出一个数,为这12个月的平均月末结余,保留到小数点后第二位,并在最前面加一个""符。 输出 输出一个数,为这 12 个月的平均月末结余,保留到小数点后第二位,并在最前面加一 个""符。 样例输入 100.00 489.12 12454.12 1234.10 823.05 109.20 5.27 1542.25 839.18 83.99 1295.01 1.75 样例输出 $1581.42

37 、计算多项式的值 对于多项式 f(x) = ax3 + bx2 + cx + d 和给定的 a, b, c, d, x,计算 f(x)的值。 输入 输入仅一行,包含 5 个实数,分别是 x,及参数 a、b、c、d 的值,每个数都是绝对值不 超过 100 的双精度浮点数。数与数之间以一个空格分开。 输出:输出一个实数,即 f(x)的值,保留到小数点后 7 位。 样例输入:2.31 1.2 2 2 3 样例输出:33.0838692 38 、温度表达转化 利用公式 C = 5 * (F-32) / 9 (其中 C 表示摄氏温度,F 表示华氏温度) 进行计 算转化。 输入 输入一行,包含一个实数 f,表示华氏温度。( f >= -459.67) 输出 输出一行,包含一个实数,表示对应的摄氏温度,要求精确到小数点后 5 位。 样例输入 41 样例输出 5.00000 提示 C/C++,使用 double 39 、与圆相关的计算 给出圆的半径,求圆的直径、周长和面积。 输入 输入包含一个实数 r( 0 < r <= 10,000),表示圆的半径。 输出 输出一行,包含三个数,分别表示圆的直径、周长、面积,数与数之间以一个空格分开, 每个数保留小数点后 4 位。 样例输入 3.0 样例输出 6.0000 18.8495 28.2743 提示内部资料 请勿外传 翻印必究 如果圆的半径是 r,那么圆的直径、周长、面积分别是 2*r、2 * pi * r、pi * r * r, 其中约定 pi=3.14159。 可以使用 printf("%.4lf", ...)实现保留小数点后 4 位。 来源:习题(3-1) 计算概论 07(工学院)周文灵 40 、大象喝水 一只大象口渴了,要喝 20 升水才能解渴,但现在只有一个深 h 厘米,底面半径为 r 厘米的小圆桶(h 和 r 都是整数)。问大象至少要喝多少桶水才会解渴。 输入 输入有一行:包行两个整数,以一个空格分开,分别表示小圆桶的深 h 和底面半径 r, 单位都是厘米。 输出 输出一行,包含一个整数,表示大象至少要喝水的桶数。 样例输入 23 11 样例输出 3 提示 如果一个圆桶的深为 h 厘米,底面半径为 r 厘米,那么它最多能装 Pi * r * r * h 立 方厘米的水。(设 Pi=3.14159) 1 升 = 1000 毫升 1 毫升 = 1 立方厘米