青少年软件编程(C语言)等级考试试卷(三级)
分数:100.00 题数:5
一、编程题(共5题,共100分)
1. 完美立方
形如a^3 = b^3 + c^3 + d^3 的等式被称为完美立方等式。例如12^3 = 6^3 + 8^3 + 10^3 。
编写一个程序,对任给的正整数N(N≤100),寻所有的四元组(a, b, c, d),使得
a^3 =b^3 + c^3 + d^3 ,其中a,b,c,d 大于 1, 小于等于N,且b<=c<=d。
输入
一个正整数N (N≤100)。
输出
每行输出一个完美立方。输出格式为:
Cube = a, Triple = (b,c,d)
样例输入
24
样例输出
Cube = 6, Triple = (3,4,5)
Cube = 12, Triple = (6,8,10)
Cube = 18, Triple = (2,12,16)
Cube = 18, Triple = (9,12,15)
Cube = 19, Triple = (3,10,18)
Cube = 20, Triple = (7,14,17)
Cube = 24, Triple = (12,16,20)
#include<iostream>
using namespace std;
int main()
{
int a,b,c,d,n;
cin>>n;
for(a=1;a<=n;a++)
{
for(b=2;b<=a;b++)
{
for(c=b;c<=a;c++)
{
for(d=c;d<=a;d++)
if(a*a*a==b*b*b+c*c*c+d*d*d)
cout<<"Cube="<<a<<","<<"Triple="<<"("<<b<<","<<c<<","<<d<<")"<<endl;
}
}
}
}
2. 不定方程求解
给定正整数a,b,c。求不定方程 ax+by=c 关于未知数x和y的所有非负整数解组数。【输入】
一行,包含三个正整数a,b,c,两个整数之间用单个空格隔开。每个数均不大于1000。【输出】
一个整数,即不定方程的非负整数解组数。
【输入样例】
2 3 18
【输出样例】
4
#include <iostream>
using namespace std;
int main()
{
int a,b,c,x,y;
int count=0;
cin>>a>>b>>c;
for(x=0; x<=c/a; x++) //(c-by)/a=x,可知:c/a>=x
{
y=(c-a*x)/b;
if(a*x+b*y==c) count++;
}
cout<<count;
return 0;
}
3. 分解因数
试题编号:202012-013
题型:编程题
答案:
难度:一般
试题解析:
4. 上台阶
试题编号:202012-014
题型:编程题
答案:
难度:一般
试题解析:
试题编号:202012-015
编写c语言的软件
题型:编程题
答案:
难度:一般
试题解析:
田忌赛马
题目描述 Description
田忌赛马的故事已家喻户晓,大家也耳熟能详,即是以不同的排列顺序来支配上中下三等马来赢得比赛,体现了一种博弈的思维。现如果稍改一下比赛的规则,田忌和齐威王都按照某一周期性规律出马对战,比如:“上-下上-中-上-下-上-中……”,就是以“上-下-上-中”为周期不断循环。胜负还是以“上等马赢中等马和下等马,中等马赢下等马,若两只马等级一样,则打平”。请问经过N轮比赛之后,田忌和齐威王谁赢得次数多?
输入描述 Input Description
输入包含三行:
第一行为三个整数:N,NT,NQ,分别表示比了N轮,田忌出马对战的周期长度,齐威王出马对战的周期长度。N≤100,NT≤100,NQ ≤ 100。
第二行包含NT个整数,表示田忌出马对战的规律。
第三行包含NQ个整数,表示齐威王出马对战的规律。
其中,以“1”代表上等马;“2”代表中等马;“3”代表下等马。相邻两个整数之间用单个空格隔开。
输出描述 Output Description
输出一行,若田忌赢的次数多,输出T;若齐威王赢的次数多,输出Q;若两人打平,输出P。
样例输入 Sample Input
10 3 4
1 2 3
1 2 3 3
1
2
3
样例输出 Sample Output
T
1
数据范围及提示 Data Size & Hint
提示:
对于测试数据,出马对战的过程为:比赛10次,田忌以“上-中-下”顺序循环出战,齐威王以“上-中-下-下”顺序循环出战,其过程为:
T:1 2 3 1 2 3 1 2 3
Q:1 2 3 3 1 2 3 3 1
即:田忌:上-中-下-上-中-下-上-中-下-上
齐威王:上-中-下-下-上-中-下-下-上-中
则战果为:P - P - P -T -Q - Q - T -T- Q - T
则:平局3次,田忌赢了4次,齐威王赢了3次,比赛结果为田忌赢,输出T。
整数去重
给定含有n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。
【输入】
输入包含两行:
第一行包含一个正整数n(1 ≤ n ≤ 20000),表示第二行序列中数字的个数;
第二行包含n个整数,整数之间以一个空格分开。每个整数大于等于10、小于等于5000。
【输出】
输出只有一行,按照输入的顺序输出其中不重复的数字,整数之间用一个空格分开。
【输入样例】
5
10 12 93 12 75
【输出样例】
10 12 93 75
#include<iostream>
using namespace std;
int main()
{
int n;
int a[20001];
bool b[20001];
int i,j;
cin>>n;//输入数组大小n
for(i=1; i<=n; i++)
{
cin>>a[i];//输入元素
b[i]=true;//初始化为没有重复
}
for(i=1; i<=n; i++)
if(b[i])//判断a[i]是否被标记为重复
for(j=i+1; j<=n; j++) //寻a[i]后是否有重复的数
if(a[i]==a[j])//如果有重复的数
b[j]=false;//标记为不能输出
for(i=1; i<=n; i++) //输出没有重复的数
if(b[i]==true)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
第num小的素数
用户输入一个正整数num,求第num小的素数。
输入∶一个整数num,0<num<10000。
输出∶第num小的素数。
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int i,num,count=0;
long long n=1,k;
cin>>num;
while(count!=num) {
n++;
k=sqrt(n);
for(i=2; i<=k; i++)
if(n%i==0) break;
if(i>k) count++;
}
cout<<n;
return 0;
}
宝石与石头
给定字符串 J 代表你现在拥有代表宝石的类型,和字符串 S 代表你拥有的石头。S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
J 中的字母不重复,J 和 S 中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。
示例1
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论