#7.1判断素数
7-1 判断素数。
判断输入的整数是否是素数,如果是则输出"1",否则输出"0"。
输入格式:
输入一个整数。
输出格式:
按照要求输出1或者0,最后换行。
输入样例1:
17
输出样例1:
1
输入样例2:
2488
输出样例2:
0
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
cout<<"0"<<endl;
return 0;
}
}
cout<<"1"<<endl;
return 0;
}
#7-2 求三个数中的最大值
从键盘上输入3个整数,求其中的最大值并输出。
输入格式:
输入三个整数,中间用空格分隔。
输出格式:
输出一个整数,最后换行。
输入样例1:
1 2 3
输出样例1:
3
输入样例2:
1 3 2
输出样例2:
3
输入样例3:
2 1 3
输出样例3:
3
输入样例4:
2 3 1
输出样例4:
3
输入样例5:
3 1 2
输出样例5:
3
输入样例6:
3 2 1
输出样例6:
3
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
int a[3];
for(int i=0;i<3;i++){
cin>>a[i];
}
sort(a,a+3);
cout<<a[2]<<endl;
return 0;
}
#7-3 h0053. 求一元二次方程的根
分数 10
作者 黄正鹏
单位 贵州工程应用技术学院
利用公式x1 = (-b + sqrt(b* b-4* a* c))/(2* a), x2 = (-b - sqrt(b* b-4* a* c))/(2* a)求一元二次方程ax^2 + bx + c =0的根,其中a不等于0。
输入格式:
第一行是待解方程的数目n。
其余n行每行含三个浮点数a, b, c(它们之间用空格隔开),分别表示方程ax^2 + bx + c =0的系数。
输出格式:
输出共有n行,每行是一个方程的根:
若是两个实根,则输出:x1=…;x2 = …
若两个实根相等,则输出:x1=x2=…
若是两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i
所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。
x1和x2的顺序:x1的实部>Re的实部||(x1的实部==x2的实部&&x1的虚部>=x2的虚部)
输入样例:
3
1.0 3.0 1.0
2.0 -4.0 2.0
1.0 2.0 8.0
输出样例:
在这里给出相应的输出。例如:
x1=-0.38197;x2=-2.61803
x1=x2=1.00000
x1=-1.00000+2.64575i;x2=-1.00000-2.64575i
#include<bits/stdc++.h>
using namespace std;
int main()
{
double a,b,c;
int n;
cin>>n;
while(n--)
{
cin>>a>>b>>c;
double p = b * b - 4 * a * c;
double x1 = -b / (2 * a);
if(!x1) x1 = 0;
if(p > 0) printf("x1=%.5f;x2=%.5f\n",(-b + sqrt(p)) / (2 * a),(-b - sqrt(p)) / (2 * a));
else if(p == 0) printf("x1=x2=%.5f\n",x1);
else
{
p = -p;
double y1 = sqrt(p) / (2 * a);
double y2 = -sqrt(p) / (2 * a);
printf("x1=%.5f%+.5fi;x2=%.5f%+.5fi\n",x1,y1,x1,y2);
}
}
return 0;
}
#7-4 整数的位数
输入一个正整数,求出其总位数。
输入格式:
输入一个正整数。
输出格式:
输出整数的总位数
输入样例:
897
输出样例:
3
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
int sum=0,n;
cin>>n;
while(n){
n/=10;
sum++;
}
cout<<sum<<endl;
return 0;
}
#7-5 字符变换
从键盘上输入一个字符,若是大写字母则转换为对应的小写字母,若是小写字母则转换为对应的大写字母,若是其他字符则保持不变,最后输出转换后的字符。
输入格式:
输入一个字符。
输出格式:
输出转换后的字符,最后换行。
输入样例1:
A
输出样例1:
a
输入样例2:
e
输出样例2:
E
输入样例3:
7
输出样例3:
7
#include<bits/stdc++.h>
#include<cmath>
#include<string.h>
#include<ctype.h>
using namespace std;
int main(){
char s;
cin>>s;
if(islower(s))s-=32;
else if(isupper(s)) s+=32;
cout<<s<<endl;
return 0;
}
#7-6 分段函数计算
从键盘上输入一个双精度实数x,根据下面分段函数的公式计算y的值并输出。
分段函数公式.jpg
输入格式:
从键盘上输入一个双精度实数x。
输出格式:
输出y的值,结果保留2位有效数字,最后换行。
输入样例1:
-9
输出样例1
9.00
输入样例2:
6
输出样例2
632.91
输入样例3:
15
输出样例3
3.87
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
double x;
cin>>x;
if(x<1)printf("%.2f",abs(x));
else if(x<10)printf("%.2f\n",pow(x,3.6));
else printf("%.2f\n",sqrt(x));
return 0;
}
#7-7 输出某一年的天数
一年有365天(平年)或者366天(闰年),请从键盘上输入一个年份,然后输出这一年的天数。
输入格式:
从键盘上输入一个整数。
输出格式:
输出一个整数。
输入样例1:
2021
输出样例1:
365
输入样例2:
2028
输出样例2:
366
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
if((n%4==0&&n%100!=0)||n%400==0)cout<<"366"<<endl;
else cout<<"365"<<endl;
return 0;
}
#7-8 分数等级转换
从键盘上输入一个学生的成绩(双精度实数),按照如下规则转换成相应的等级输出。
分数在范围[90,100],等级为“优秀”,[75,90) ,等级为“良好”,[60,75),等级为“及格”, [0,60),等级为“不及格”。
输入格式:
输入一个实数。
输出格式:
输出相应汉字等级,最后换行。
输入样例1:
100
输出样例1:
优秀
输入样例2:
90
输出样例2:
优秀
输入样例3:
75
输出样例3:
良好
输入样例4:
60
输出样例4:
及格
输入样例5:
0
输出样例5:
不及格
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
switch(n){
case 100: cout<<"优秀"<<endl;break;
case 90: cout<<"优秀"<<endl;break;
case 75: cout<<"良好"<<endl;break;
case 60: cout<<"及格"<<endl;break;
case 0:cout<<"不及格"<<endl;break;
}
return 0;
}
#7-9 求三角形的面积
从键盘输入一个三角形三条边的长度,编写程序求其面积并输出(结果保留2位小数)。
提示:用海伦公式
输入格式:
输入三个实数(以空格间隔)
输出格式:
输出一个实数表示三角形的面积(结果保留2位小数)
输入样例:
3 4 5
输出样例:
6.00
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;
double p;
p=(a+b+c)/2;
printf("%.2f\n",sqrt(p*(p-a)*(p-b)*(p-c)));
return 0;
}
#7-10 计算邮费
从键盘上输入货物重量x(一个双精度实数),计算对应的邮费y并输出(保留两位小数),计算公式如下: 如果x介于区间(0,5],则y=10+x,如果x介于区间(5,10],则y=15+0.5x, 如果x>10,则y=20+0.3x,如果x≤0,则输出信息“数据输入有误。”
输入格式:
输入一个双精度实数。
输出格式:
输出相应信息,最后换行。
输入样例1:
-999
输出样例1:
数据输入有误。
输入样例2:
0
输出样例2:
数据输入有误。
输入样例2:
5
输出样例3:
15.00
输入样例4:
10
输出样例4:
20.00
输入样例5:
20
输出样例5:
26.00
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
int x;
cin>>x;
double y;
if(x<=0){cout<<"数据输入有误。"<<endl;return 0;}
else if(x<=5) y=double(10+x);
else if(x<=10) y=15+0.5*x;
else y=20+0.3*x;
printf("%.2f\n",y);
return 0;
}
#7-11 求总金额
小C带着自己不用的物品参加学校组织的跳蚤市场,共卖出了n件物品,请帮他计算一下总金额。
输入格式:
输入两行数据
第一行输入n的值,
第二行输入n件物品的价格,用空格分隔。
输出格式:
以保留两位小数的形式输出。
输入样例:
3
5.6 8.4 4.5
输出样例:
18.50
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
int t;
cin>>t;
double n,sum=0;
while(t--){
cin>>n;
sum+=n;
}
printf("%.2f\n",sum);
}
#7-12 输出直角三角形
输入一个字符和一个正整数n,输出由该字符构成的n行左下角的直角三角形。
输入格式:
第一行输入一个字符
第二行输入一个正整数n。
输出格式:
输出由该字符构成的n行左下角的直角三角形。
输入样例1:
A
5
输出样例1:
A
AA
AAA
AAAA
AAAAA
输入样例2:
$
4
输出样例2:
$
$
$$$$
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
char s;
cin>>s;
int n;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=i;j>=1;j--){
cout<<s;
}
cout<<endl;
}
return 0;
}
#7-13 计算平均值,统计大于平均值的整数个数
输入正整数n(表示整数个数),继续输入n个整数存入数组,计算它们的平均值,并统计出大于平均值的整数的个数。
输入格式:
输入包含二行:
第1行为n,表示整数序列的长度;
第2行为n个整数,整数之间以一个空格分开。
输出格式:
输出包含二行:
第1行输出平均值,保留2位小数,最后换行;
第2行输出大于平均值的整数个数。
输入样例:
10
1 3 5 7 9 11 13 15 17 20
输出样例:
10.10
5
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
int a[n];
double sum=0;
for(int i=0;i<n;i++){
cin>>a[i];
sum+=a[i];
}
sum/=n;
int num=0;
for(int i=0;i<n;i++){
if(a[i]>sum) num++;
}
printf("%.2f\n",sum);
printf("%d",num);
return 0;
}
#7-14 找数
从键盘输入n个不重复的整数存入数组,输入要找的整数x,若在数组中存在,则输出元素下标;若不存在,则显示“Not Exist!”。
输入格式:
输入包含三行:
第1行为n,表示整数序列的长度;
第2行为n个不重复整数,整数之间以一个空格分开;
第3行包含一个整数x,为要查找的数。
输出格式:
若存在,则输出元素下标; 若不存在,则输出“Not Exist!”。
输入样例1:
10
1 3 7 9 13 18 20 36 10 100
36
输出样例1:
7
输入样例2:
11
-5 -4 -3 -2 -1 0 1 2 3 4 5
669
输出样例2:
Not Exist!
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
//set<vector<int> >a;
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
//a.insert(x);
}
int x;
cin>>x;
//set<vector<int> >iterator::it=a.find(x);
int i;
for( i=0;i<n;i++){
if(x==a[i])break;
}
if(i<n) cout<<i<<endl;
else cout<<"Not Exist!"<<endl;
return 0;
}
#7-15 矩阵加法
首先从键盘上两个矩阵的行数n和列数m,然后输入两个矩阵A和B的元素值,最后求出两个矩阵的和C并输出其元素值。
输入格式:
第1行包含两个整数n和m,表示矩阵的行数和列数。
接下来n行,每行m个整数,表示矩阵A的元素值。
再接下来n行,每行m个整数,表示矩阵B的元素值。
相邻两个整数之间用空格分隔。
输出格式:
n行m个数,表示矩阵C的元素值。每行的两个数之间用一个空格分隔。
输入样例:
3 3
11 12 13
21 22 23
31 32 33
10 20 30
11 21 31
12 22 32
输出样例:
21 32 43
32 43 54
43 54 65
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int a[n][m];
int b[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>b[i][j];
a[i][j]+=b[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<a[i][j];
if(j!=m)cout<<" ";
}
cout<<endl;
}
return 0;
}
#7-16 计算次对角线元素平均值
首先从键盘输入方阵的行数n,然后输入n行n列的整数保存到数组a中,最后计算方阵中次对角线元素的平均值并输出。
输入格式:
第一行输入方阵行数n;
以下n行每行输入n个整数,以空格间隔。
输出格式:
输出平均值,保留两位小数。
输入样例:
5
11 22 33 44 55
22 33 44 77 66
33 44 10 66 77
44 99 66 77 88
33 66 77 88 99
输出样例:
54.80
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
int a[n][n];
//int b[n][m];
double sum=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
if(i+j==n-1) sum+=a[i][j];
}
}
printf("%.2f\n",sum/n);
return 0;}
#7-17 最小回文素数
给定一个非负整数n,寻找比它大的最小回文素数。例如,当n=100时,结果为101。因为101是回文数(正读、反读都一样的数)且是素数。
输入格式:
第一行一个T(1≤T≤100),代表有T组测试数据。对于每组测试,输入一个整数n( 0≤n≤65535) 。
输出格式:
对于每组测试,输出比它大的最小回文素数,每个输出占一行。
输入样例:
2
9
99
输出样例:
11
101
#include<bits/stdc++.h>
using namespace std;
int a[]={2,3,5,7,11,101,131,151,181,191,313,353,373,383,727,757,787,797,919,929,10301,10501,10601,11311,11411,12421,12721,12821,13331,13831,13931,14341,14741,15451,15551,16061,16361,16561,16661,17471,17971,18181,18481,19391,19891,19991,30103,30203,30403,30703,30803,31013,31513,32323,32423,33533,34543,34843,35053,35153,35353,35753,36263,36563,37273,37573,38083,38183,38783,39293,70207,70507,70607,71317,71917,72227,72727,73037,73237,73637,74047,74747,75557,76367,76667,77377,77477,77977,78487,78787,78887,79397,79697,79997,90709,91019,93139,93739,94049};
int main(){
int t;
cin>>t;
int n;
while(t--){
cin>>n;
for(int i=0;;i++){
if(a[i]>n){
cout<<a[i]<<endl;
break;
}
}
}
return 0;
}
#7-18 计算区间素数和
杨老师正在上《离散数学》课程的“数论”内容,讲授素数的知识。素数又称为质数。一个大于1的整数p是素数,当且仅当p只能被1和自身整除。很显然,2是最小的素数。他想设计一个程序,可以计算整数 m 和 n 之间的所有素数之和。
输入格式:
输入两个整数 m,n, 题目不保证 m≤n,但是保证 0≤m≤20000,0≤n≤20000。
输出格式:
输出 m 和 n 之间的所有素数的和。
输入样例01:
在这里给出一组输入。例如:
10 0
输出样例01:
在这里给出相应的输出。例如:
17
输入样例02:
在这里给出一组输入。例如:
100 200
输出样例02:
在这里给出相应的输出。例如:
3167
#include<bits/stdc++.h>
#include<cmath>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
using namespace std;
void pd(int i,int j){
int sum=0;
if(i<=1)sum=-1;
for(;i<=j;i++){
int k,z=0;
for( k=2;k<=sqrt(i);k++){
if(i%k==0){z=1;break;}
}
if(z!=1)sum+=i;
}
cout<<sum<<endl;
}
int main(){
int m,n;
cin>>m>>n;
pd(min(n,m),max(n,m));
return 0;
}
#7-19 求n个数的最大值、最小值、平均值
从键盘输入n(3<=n<=20)个整数,求出这n个数的最大值、最小值、平均值(平均值保留2位小数)。
输入格式:
在第一行输入一个介于3至20之间的整数n,
在第二行输入n个整数,中间用一个空格来分隔这n个数据。
输出格式:
分三行依次输出最大值、最小值、平均值。格式为:
max=最大值
min=最小值
average=平均值(保留2位小数)
输入样例:
10
1 2 3 4 5 6 7 8 9 10
输出样例:
max=10
min=1
average=5.50
#include<bits/stdc++.h>
#include<cmath>
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
using namespace std;
int main(){
int n;
cin>>n;
double sum=0;
int max1=0,min1=100;
for(int i=0;i<n;i++){
int x;
cin>>x;
min1=min(min1,x);
max1=max(max1,x);
sum+=x;
}
printf("max=%d\n",max1);
printf("min=%d\n",min1);
printf("average=%.2f",sum/n);
return 0;
}
#7-20 xrf的镜子碎了?
xrf有一面镜子,可以把任何接触镜面的东西变成原来的两倍,同时呢,那增加的那部分是反的。
xrf很喜欢他的镜子,但是因为一股神秘力量(可能来自pltdhll),xrf的镜子碎了!xrf很伤心。
lyx知道后想要把自己的镜子送给xrf,(lyx的镜子有一个独属于lyx的名字,叫做“lyx的镜子”)。而lyx的镜子虽然可以把接触镜面的东西变成原来的两倍,但增加的那部分是相同的。
lyx为了展示他的镜子,不知道从哪拿来了一串珍珠项链。我们把项链用AB来表示,不同的字母表示不同颜色的珍珠。如果把A端接触镜面的话,镜子会把这条项链变成ABAB;如果再用B端接触的话,则会变成ABABABAB,即不论用哪端接触增加的部分都是相同的。
xrf收到镜子后迫不及待的想要试一下,于是想拿出随身带的珍珠项链,可是不知道珍珠项链哪去了,只好重新找了一条珍珠项链测试了。
xrf始终只用项链的一端接触镜子,经过多次与镜子接触最终得到了一条新的项链,xrf觉得这面镜子很有意思,但是忘了最初的项链长什么样了,只记得最初始的项链是不可能与lyx的镜子接触过。现在xrf把这个新的项链给你,请你帮他找出原来项链的形状。
注:
xrf给你的项链可能没有接触过lyx的镜子(可能是因为xrf很幽默\斜眼笑)。
若项链为ABAB,则我们认为该项链可能与lyx的镜子接触过。
若项链为AB,则我们认为该项链不可能与lyx的镜子接触过。
输入格式:
一个由大写英文字母(A~Z)组成的字符串(长度不超过100000),表示xrf给你的项链。
输出格式:
一个字符串,表示项链的形状。
输入样例1:
ABABABAB
输出样例1:
AB
输入样例2:
ABCDEFGHIJKLMN
输出样例2:
ABCDEFGHIJKLMN
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
char s[100000];
cin>>s;
while(strlen(s)%2!=1){
int len=strlen(s),k=0;
for(int i=0,j=len/2;i<len/2;i++,j++){
if(s[i]!=s[j]){
k=1;break;
}
}
if(k)break;
fill(s+len/2,s+len,'\0');
}
cout<<s<<endl;
return 0;
}
#7-21 取款情况
编写程序,模拟ATM机上取款的主要情景,要求依次处理以下几种情形并给出相关提示:帐号或密码错误;余额不足;超过单次取款限额;取款成功。
输入格式:
空格分隔的四个数:前两个整数模拟帐号和密码,后两个浮点数依次表示帐号余额和取款数额。
为简化操作,假定正确的帐号及密码分别是整数12345,567890。单次取款限额是20000。
输出格式:
根据情况给出相应的提示信息,如是取款成功,要求以[取款成功:原余额-取款数额=现余额]显示(金额保留两位小数)。所有显示除汉字外均使用西文符号
输入样例1:
12345 5678910 3456.78 123
输出样例1:
帐号或密码错误
输入样例2:
12345 567890 3456.78 123
输出样例2:
取款成功:3456.78-123.00=3333.78
#include<bits/stdc++.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int n,m;
double chunkuan,qukuan;
cin>>n>>m>>chunkuan>>qukuan;
if(n!=12345||m!=567890)cout<<"帐号或密码错误"<<endl;
else if(chunkuan<qukuan) cout<<"余额不足"<<endl;
else if(qukuan>20000) cout<<"超过单次取款限额"<<endl;
else printf("取款成功:%.2f-%.2f=%.2f\n",chunkuan,qukuan,chunkuan-qukuan);
return 0;
}
#7-22 简码
小明有一串很长的英文字母,可能包含大写和小写。在这串字母中,有很多连续的是重复的。小明想了一个办法将这串字母表达得更短:将连续的几个相同字母写成字母+出现次数的形式。例如,连续的5个a,即 aaaaa,简写成 a5。对于这个例子:aaaaaCCeeelHH,小明可以简写成 a5C2e3lH2。为了方便表达,小明不会将连续的超过9个相同的字符写成简写的形式。
现在给出一串字符串,请帮助小明完成简写。
输入格式:
输入一行为一个由大写字母和小写字符构成的字符串,长度不超过100000。
输出格式:
输出为一行字符串,表示简写后的字符串。
输入样例:
aaaaaCCeeelHH
输出样例:
a5C2e3lH2
#include<bits/stdc++.h>
#include<iostream>
using namespace std;
int main(){
char s[100005];
//gets(s);
cin>>s;
//getline(cin,s);
int i=0;
int sum=0;
int flag=1;
while(s[i]!='\0'){
if(s[i+1]==s[i]){
sum++;
}
if(s[i+1]!=s[i]&&sum!=0&&sum<9)
{
sum++;
printf("%c%d",s[i],sum);
sum=0;
flag=0;
}
if(s[i+1]!=s[i]&&sum==0&&flag==1){
printf("%c",s[i]);
}
if(sum>=9&&s[i+1]!=s[i]){
for(int j=0;j<sum+1;j++){
printf("%c",s[i]);
}
sum=0;
}
i++;
flag=1;
}
return 0;
}
#7-23 埃筛法求区间素数
素数是仅能被它本身和1整除的任何整数。埃拉托斯特尼筛法,简称埃氏筛,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。算法思想:给出要筛数值的范围,找出其以内的素数。先用2去筛,即把2留下,把2的倍数剔除掉;再用下一个质数3去筛,把3留下,把3的倍数剔除掉;接下去用下一个质数5筛,把5留下,把5的倍数剔除掉;不断重复下去…,如图所示。
编写一个程序,输出区间[m, n]之间的所有素数。
筛法.png
输入格式:
输入的第一行是一个整数t,表示t次查询。 后面的t行中,每行2个整数m和n。
输入保证 2 <= m <= n <= 1000000。
输出格式:
对每一行m和n,把区间[m, n]之间的所有素数输出到一行。每个数之后跟一个空格。若区间内无素数,输出-1。
输入样例:
在这里给出一组输入。例如:
3
2 20
10 40
20 100
输出样例:
在这里给出相应的输出。例如:
2 3 5 7 11 13 17 19
11 13 17 19 23 29 31 37
23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
bool pad(int n){
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
return false;
}
}
cout<<n<<' ';
return true;
}
void pd(int a ,int b){
int d=-1;
for(int i=a;i<=b;i++){
if(pad(i)) d=1;
}
if(d!=1) cout<<d;
}
int main(){
int t;
cin>>t;
int n,m;
while(t--){
cin>>m>>n;
pd(m,n);
cout<<endl;
}
return 0;
}
#7-24 斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。试用递归方法求解该数列的第n项。
输入格式:
输入一个正整数n (1<=n<=40)
输出格式
输出一个数,数列的第n项
输入样例:
在这里给出一组输入。例如:
7
输出样例:
在这里给出相应的输出。例如:
13
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int f(int n){
if(n==0)return 0;
if(n==1)return 1;
return f(n-1)+f(n-2);
}
int main(){
int n;
cin>>n;
cout<<f(n);
return 0;
}
#7-25 h0122. 对称顺序
您在由一群小丑经营的Albatross Circus Management工作,您刚写了一个以长度非递减的顺序输出姓名列表的程序(每个姓名至少要和前面的名字一样长)。但是,您的老板不喜欢这样的输出方式,他要求改为看上去对称的输出形式,最短的字符串在顶部和低部,最长的在中间。他的规则是每一对姓名在列表对等的地方,每一对姓名中的第一个在列表的上方。如在样例输入的第一个例子中,Bo和Pat是第一对,Jean和Kevin是第二对,等等。
输入格式:
输入包含若干测试用例。每个测试用例是一个或多个字符串组成的集合。输入以0为结束。每个测试用例以一个整数n为开始,表示该测试用例中字符串的个数,每个字符串一行,字符串以长度的非递减顺序排列。字符串不含空格。每个测试用例中的字符串至少有一个,至多有15个。每个字符串至多25个字符。
输出格式:
对每个测试用例输出一行“SET n”,其中n从1开始,后面的输出如样例输出所示。
输入样例:
7
Bo
Pat
Jean
Kevin
Claude
William
Marybeth
6
Jim
Ben
Zoe
Joey
Frederick
Annabelle
5
John
Bill
Fran
Stan
Cece
0
输出样例:
SET 1
Bo
Jean
Claude
Marybeth
William
Kevin
Pat
SET 2
Jim
Zoe
Frederick
Annabelle
Joey
Ben
SET 3
John
Fran
Cece
Stan
Bill
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
int g=1;
while(n){
char s[16][30];
for(int i=1;i<=n;i++){
cin>>s[i];
}
cout<<"SET "<<g<<endl;
for(int i=1;i<=n;i+=2){
cout<<s[i]<<endl;
}
int i;
if(n%2==0) i=n;
else i=n-1;
for( ;i>=2;i-=2){
cout<<s[i]<<endl;
}
g++;
cin>>n;
}
return 0;
}
#7-26 最短购物距离
大明是一个购物狂,他喜欢在一条很长的直线街道上购物,每次他都会开着车去。
因为那条街很长,大明要先把车停在那条街上的某个商店门口,然后去所有的商店买东西,但是为了避免携带东西进入商店,因此,他总是在每个商店购物后,先回到停车点把刚刚购买到的商品放到车上后,然后再去新的一家商店购物。
假设有3家店,坐标分别为7,30,41。
若大明停车在第1家店,走的总路程等于((7-7)+(30-7)+(41-7))x2=114;若大明停车在第2家店,走的总路程等于((30-7)+(30-30)+(41-30))x2=68;若大明停车在第3家店,走的总路程等于((41-7)+(41-30)+(41-41))x2=90;
大明希望能找到最佳一个停车点(注意,必须是某个商店门口),使得他走的路最短,请你帮帮他。
输入格式:
测试数据有多组,首先输入组数T,然后T组测试。
每组测试首先是一个n(1 <= n <= 100),表示商店的个数。接下来有n个值小于1000的非负整数,表示每个商店的位置。
输出格式:
对于每组测试,输出大明需要走的最短距离。
输入样例:
2
2 20 15
3 7 30 41
输出样例:
10
68
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int a[n];
int sum=0,num=10000000;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
sum=0;
for(int j=0;j<n;j++){
if(a[i]>a[j])sum+=a[i]-a[j];
else sum+=a[j]-a[i];
}
sum*=2;
num=min(num,sum);
}
cout<<num<<endl;
}
return 0;
}
#7-27 h0132. 钞票和硬币
读取一个带有两个小数位的浮点数,这代表货币价值。
在此之后,将该值分解为多种钞票与硬币的和,每种面值的钞票和硬币使用数量不限,要求使用的钞票和硬币的数量尽可能少。
钞票的面值是100,50,20,10,5,2。
硬币的面值是1,0.50,0.25,0.10,0.05和0.01。
输入格式:
输入一个浮点数N(0≤N≤1000000.00)。
输出格式:
参照输出样例,输出每种面值的钞票和硬币的需求数量。
输入样例:
112.03
输出样例:
NOTAS:
1 nota(s) de R$ 100.00
0 nota(s) de R$ 50.00
0 nota(s) de R$ 20.00
1 nota(s) de R$ 10.00
0 nota(s) de R$ 5.00
1 nota(s) de R$ 2.00
MOEDAS:
0 moeda(s) de R$ 1.00
0 moeda(s) de R$ 0.50
0 moeda(s) de R$ 0.25
0 moeda(s) de R$ 0.10
0 moeda(s) de R$ 0.05
3 moeda(s) de R$ 0.01
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int n1=0,n2=0,n3=0,n4=0,n5=0,n6=0,m1=0,m2=0,m3=0,m4=0,m5=0,m6=0;
double sum;
cin>>sum;
while(sum-100>=0) {sum-=100;n1++;}
while(sum-50>=0){sum-=50;n2++;}
while(sum-20>=0) {sum-=20;n3++;}
while(sum-10>=0) {sum-=10;n4++;}
while(sum-5>=0) {sum-=5;n5++;}
while(sum-2>=0) {sum-=2;n6++;}
while(sum-1>=0) {sum-=1;m1++;}
while(sum-0.5>=0) {sum-=0.5;m2++;}
while(sum-0.25>=0) {sum-=0.25;m3++;}
while(sum-0.1>=0) {sum-=0.1;m4++;}
while(sum-0.05>=0) {sum-=0.05;m5++;}
while(sum-0.01>=0) {sum-=0.01;m6++;}
cout<<"NOTAS:"<<endl;
cout<<n1<<" nota(s) de R$ 100.00"<<endl;
cout<<n2<<" nota(s) de R$ 50.00"<<endl;
cout<<n3<<" nota(s) de R$ 20.00"<<endl;
cout<<n4<<" nota(s) de R$ 10.00"<<endl;
cout<<n5<<" nota(s) de R$ 5.00"<<endl;
cout<<n6<<" nota(s) de R$ 2.00"<<endl;
cout<<"MOEDAS:"<<endl;
cout<<m1<<" moeda(s) de R$ 1.00"<<endl;
cout<<m2<<" moeda(s) de R$ 0.50"<<endl;
cout<<m3<<" moeda(s) de R$ 0.25"<<endl;
cout<<m4<<" moeda(s) de R$ 0.10"<<endl;
cout<<m5<<" moeda(s) de R$ 0.05"<<endl;
cout<<m6<<" moeda(s) de R$ 0.01";
return 0;
}
#7-28 h0112. 跳台阶
一个楼梯共有n级台阶,每次可以走一级或者两级,问从第0级台阶走到第n级台阶一共有多少种方案。
输入格式:
共一行,包含一个整数n。1≤n≤15
输出格式:
共一行,包含一个整数,表示方案数。
输入样例:
5
输出样例:
8
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
int d1=1,d2=2;
int a[100];
for(int i=1;i<=n;i++){
if(i==1)a[i]=1;
else if(i==2)a[i]=2;
else a[i]=a[i-1]+a[i-2];
}
cout<<a[n]<<endl;
return 0;
}
#7-29 h0121. 螺旋矩阵
分数 6
作者 黄正鹏
单位 贵州工程应用技术学院
给定一个包含 N 个正整数的序列,请你将序列中的元素以非递增顺序填充到螺旋矩阵中。
从左上角的第一个元素开始填充,并按照顺时针方向旋转。
要求矩阵有 m 行 n 列,并且 m,n 满足:
m×n=N,
m≥n,
m−n 尽可能小
输入格式:
第一行包含整数 N,1≤N≤10000。
第二行包含 N 个整数,1≤ 序列中元素 ≤10000。
输出格式:
输出填充好的 m×n 的矩阵。
数字之间用一个空格隔开,结尾不得有多余空格。
输入样例:
12
37 76 20 98 76 42 53 95 60 81 58 93
输出样例:
98 95 93
42 37 81
53 20 76
58 60 76
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 10010;
int n;
int w[N];
int main()
{
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> w[i];
sort(w, w + n, greater<int>());
int r, c;
for (int i = 1; i <= n / i; i ++ )
if (n % i == 0)
{
r = n / i;
c = i;
}
vector<vector<int>> res(r, vector<int>(c));
int dx[] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
for (int i = 0, x = 0, y = 0, d = 1; i < n; i ++ )
{
res[x][y] = w[i];
int a = x + dx[d], b = y + dy[d];
if (a < 0 || a >= r || b < 0 || b >= c || res[a][b])
{
d = (d + 1) % 4;
a = x + dx[d], b = y + dy[d];
}
x = a, y = b;
}
for (int i = 0; i < r; i ++ )
{
cout << res[i][0];
for (int j = 1; j < c; j ++ )
cout << ' ' << res[i][j];
cout << endl;
}
return 0;
}
#7-30 阿克曼(Ackmann)函数
筛法.png
输入格式:
输入m和n。
输出格式:
函数值。
输入样例:
在这里给出一组输入。例如:
3 8
输出样例:
在这里给出相应的输出。例如:
2045
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int akm(int m,int n){
if(m==0)return n+1;
else if(m>0&&n==0)return akm(m-1,1);
else if(m>0&&n>0)return akm(m-1,akm(m,n-1));
}
int main(){
int m,n;
cin>>m>>n;
cout<<akm(m,n);
return 0;
}
#7-31 统计一行文本的单词个数
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
输入格式:
输入给出一行字符。
输出格式:
在一行中输出单词个数。
输入样例:
Let’s go to room 209.
输出样例:
5
#include <stdio.h>
int main()
{
int count=0;
char ch;
ch=getchar ();
while(ch!='\n'){
if(ch!=' '){
ch=getchar ();
if (ch == ' '||ch=='\n')
count++;
}
else if(ch == ' ')
ch=getchar ();
}
printf("%d", count);
return 0;
}
#7-32 判断上三角矩阵
上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。
输入格式:
输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。
输入样例:
3
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
3
1 2 3
1 4 5
0 -1 6
输出样例:
YES
NO
NO
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int n;
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int a[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}int k=1;
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
if(a[i][j]!=0){k=0;break;}
}
if(k==0)break;
}
if(k)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
#7-33 稳赢
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。
输入格式:
输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi代表“锤子”、JianDao代表“剪刀”、Bu代表“布”。End代表输入结束,这一行不要作为出招处理。
输出格式:
对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。
输入样例:
2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End
输出样例:
Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int k;
cin>>k;
char s[1000],s1,s2,s3;
//s1="ChuiZi",s2="Bu",s3="JianDao";
scanf("%s",s);
int i=0;
while(strcmp(s,"End")!=0){
if(strcmp(s,"ChuiZi")==0){
if(i!=k){cout<<"Bu"<<endl;i++;}
else {cout<<"ChuiZi"<<endl;i=0;}
}
if(strcmp(s,"Bu")==0){
if(i!=k){cout<<"JianDao"<<endl;i++;}
else {cout<<"Bu"<<endl;i=0;}
}
if(strcmp(s,"JianDao")==0){
if(i!=k){cout<<"ChuiZi"<<endl;i++;}
else {cout<<"JianDao"<<endl;i=0;}
}
cin>>s;
}
return 0;}
#7-34 比较大小
本题要求将输入的任意3个整数从小到大输出。
输入格式:
输入在一行中给出3个整数,其间以空格分隔。
输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。
输入样例:
4 2 8
输出样例:
2->4->8
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int main(){
int a[3];
cin>>a[0]>>a[1]>>a[2];
sort(a,a+3);
cout<<a[0]<<"->"<<a[1]<<"->"<<a[2]<<endl;
return 0;
}
#7-35 考试座位号
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。
输入格式:
输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。
考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。
输出格式:
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。
输入样例:
4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4
输出样例:
3310120150912002 2
3310120150912119 1
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
typedef struct node{
long long bi;
int sh;
int kh;
}node;
int main(){
int n;
cin>>n;
node a[n];
for(int i=0;i<n;i++){
cin>>a[i].bi>>a[i].sh>>a[i].kh;
}
int k;
cin>>k;
while(k--){
int l;
cin>>l;
for(int i=0;i<n;i++){
if(a[i].sh==l) {
cout<<a[i].bi<<" "<<a[i].kh<<endl;
break;
}
}
}
return 0;}
#7-36 求整数段和
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输入格式:
输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。
输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。
输入样例:
-3 8
输出样例:
-3 -2 -1 0 1
2 3 4 5 6
7 8
Sum = 30
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int a,b,sum=0,k=0;
cin>>a>>b;
for(int i=a;i<=b;i++){
printf("% 5d",i);
k++;
sum+=i;
if(k%5==0){cout<<endl;k=0;}
// else cout<<' ';
}if(k%5!=0&&k>0)cout<<endl;
cout<<"Sum = "<<sum<<endl;
return 0;}
#7-37 计算指数
真的没骗你,这道才是简单题 —— 对任意给定的不超过 10 的正整数 n,要求你输出 2
n
。不难吧?
输入格式:
输入在一行中给出一个不超过 10 的正整数 n。
输出格式:
在一行中按照格式 2^n = 计算结果 输出 2
n
的值。
输入样例:
5
输出样例:
2^5 = 32``
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
cout<<"2^"<<n<<" = "<<pow(2,n);
return 0;}
#7-38 计算阶乘和
对于给定的正整数N,需要你计算 S=1!+2!+3!+…+N!。
输入格式:
输入在一行中给出一个不超过10的正整数N。
输出格式:
在一行中输出S的值。
输入样例:
3
输出样例:
9
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
int sum=0,num=1;
for(int i=1;i<=n;i++){
num*=i;
sum+=num;
}
cout<<sum;
return 0;}
#7-39 跟熬吧马一起画方块
漂亮国熬吧马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为漂亮国历史上首位编写计算机代码的人。2014年底,为庆祝“计算机科学教育周”正式启动,熬吧马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入格式:
输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。
输出格式:
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
输入样例:
10 a
输出样例:
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int n;
char s;
cin>>n>>s;
int i=(n+1)/2;
for(int j=0;j<i;j++){
for(int k=0;k<n;k++){
cout<<s;
}
cout<<endl;
}
return 0;}
#7-40 检查密码
本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .,还必须既有字母也有数字。
输入格式:
输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。
注意: 题目保证不存在只有小数点的输入。
输出格式:
对每个用户的密码,在一行中输出系统反馈信息,分以下5种:
如果密码合法,输出Your password is wan mei.;
如果密码太短,不论合法与否,都输出Your password is tai duan le.;
如果密码长度合法,但存在不合法字符,则输出Your password is tai luan le.;
如果密码长度合法,但只有字母没有数字,则输出Your password needs shu zi.;
如果密码长度合法,但只有数字没有字母,则输出Your password needs zi mu.。
输入样例:
5
123s
zheshi.wodepw
1234.5678
WanMei23333
pass*word.6
输出样例:
Your password is tai duan le.
Your password needs shu zi.
Your password needs zi mu.
Your password is wan mei.
Your password is tai luan le.
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main() {
int t;
cin>>t;
getchar();
while(t--) {
string str;
getline(cin,str);
int len=str.size() ;
if(len<6) {
cout<<"Your password is tai duan le."<<endl;
continue;
} else {
int flag=0;
int num=0;
int abc=0;
for(int i=0; i<len; i++) {
if(str[i]>='0'&&str[i]<='9')
num++;
else if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
abc++;
else if(!(str[i]=='.'))
flag++;
}
if(flag>0)
cout<<"Your password is tai luan le."<<endl;//有其他的字符
else if(num>0&&abc==0)
cout<<"Your password needs zi mu."<<endl;
else if(num==0&&abc>0)
cout<<"Your password needs shu zi."<<endl;
else if(num>0&&abc>0)
cout<<"Your password is wan mei."<<endl;
}
}
return 0;
}
#7-41 不变初心数
不变初心数是指这样一种特别的数,它分别乘 2、3、4、5、6、7、8、9 时,所得乘积各位数之和却不变。例如 18 就是这样的数:18 的 2 倍是 36,3+6=9;18 的 3 倍是 54,5+4=9;…… 18 的 9 倍是 162,1+6+2=9。对于 18 而言,9 就是它的初心。本题要求你判断任一个给定的数是否有不变的初心。
输入格式:
输入在第一行中给出一个正整数 N(≤ 100)。随后 N 行,每行给出一个不超过 10
5
的正整数。
输出格式:
对每个给定的数字,如果它有不变的初心,就在一行中输出它的初心;否则输出 NO。
输入样例:
4
18
256
99792
88672
输出样例:
9
NO
36
NO
#include <stdio.h>
main()
{
int i,j,y,a,b,c,d,e,f,z,x1,x2,x3,x4,x5,x6,x,sum1,sum2,p,m,flag;
scanf("%d",&a);
for(p=0;p<a;p++)
{
scanf("%d",&m);
for(i=2;i<10;i++)
{
b=m*i;
c=b%10;
d=b/10%10;
e=b/100%10;
f=b/1000%10;
y=b/10000%10;
z=b/100000%10;
sum1=c+d+e+f+y+z;
for(j=2;j<10;j++)
{
x=m*j;
x1=x%10;
x2=x/10%10;
x3=x/100%10;
x4=x/1000%10;
x5=x/10000%10;
x6=x/100000%10;
sum2=x1+x2+x3+x4+x5+x6;
if(sum1!=sum2)
{
flag=0;
break;
}
else
{
flag=1;
}
}
}
if(flag==1)
{
printf("%d\n",sum1);
}
else
{
printf("NO\n");
}
}
}
#7-42 Cassels方程
Cassels方程是一个在数论界产生了巨大影响的不定方程:x
2
+y
2
+z
2
=3xyz。该方程有无穷多自然数解。
本题并不是要你求解这个方程,只是判断给定的一组 (x,y,z) 是不是这个方程的解。
输入格式:
输入在第一行给出一个不超过 10 的正整数 N,随后 N 行,每行给出 3 个正整数 0<x≤y≤z≤1000。
输出格式:
对于每一组输入,如果是一组解,就在一行中输出 Yes,否则输出 No。
输入样例:
2
1 1 1
5 6 7
输出样例:
Yes
No
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
while(n--){
int x,y,z;
cin>>x>>y>>z;
if(x*x+y*y+z*z==3*x*z*y) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
#7-43 h0044. 连续素数的和
一些正整数能够表示为一个或多个连续素数的和。给出一个正整数,有多少个这样的表示?例如,整数53有两个表示:5+7+11+13+17和53;整数41有三个表示:2+3+5+7+11+13,11+13+17和41;整数3只有一个表示:3;整数20没有这样的表示。注意加法操作数必须是连续的素数,因此,对于整数20,7+13 和 3+5+5+7 都不是有效的表示。
请写一个程序,对于一个给出的正整数,程序给出连续素数的和的表示数。
输入格式:
输入一个正整数序列,每个数一行,在2到10000之间取值。输入结束以0表示。
输出格式:
输出的每一行对应输入的每一行,除了最后的0。输出的每一行对于一个输入的正整数,给出连续素数的和的表示数。输出中没有其他的字符。
输入样例:
2
3
17
41
20
666
12
53
0
输出样例:
在这里给出相应的输出。例如:
1
1
2
3
0
0
1
2
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int prime[10000];
const int Max=12000;
int flag[Max];
int cont;
void get_prime()
{
flag[2]=true;
for(int i=3;i<=Max;i++)
{
flag[i++]=true;
flag[i]=false;
}
if(Max%2!=0)
flag[Max]=true;
else
flag[Max]=false;
for(int i=2;i<=Max/2;i++)
{
if(flag[i]==true)
{
for(int j=2;i*j<Max;j++)
{
flag[j*i]=false;
}
}
}
cont=0;
for(int i=2,j=0;i<=Max;i++)
{
if(flag[i]==true)
{
prime[cont++]=i;
}
}
}
int main()
{
int n,m,i,j,k,t;
get_prime();
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
int num=0;
for(i=0;i<cont;i++)
{
int sum=prime[i];
int j=i+1;
while(sum<n)
{
sum+=prime[j];
j++;
}
if(sum==n)
{
num++;
}
}
printf("%d\n",num);
}
return 0;
}
#7-44 吃火锅
以上图片来自微信朋友圈:这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”,那就厉害了,我们的故事就开始了。
本题要求你实现一个程序,自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。
输入格式:
输入每行给出一句不超过 80 个字符的、以回车结尾的朋友信息,信息为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。当读到某一行只有一个英文句点 . 时,输入结束,此行不算在朋友信息里。
输出格式:
首先在一行中输出朋友信息的总条数。然后对朋友的每一行信息,检查其中是否包含 chi1 huo3 guo1,并且统计这样厉害的信息有多少条。在第二行中首先输出第一次出现 chi1 huo3 guo1 的信息是第几条(从 1 开始计数),然后输出这类信息的总条数,其间以一个空格分隔。题目保证输出的所有数字不超过 100。
如果朋友从头到尾都没提 chi1 huo3 guo1 这个关键词,则在第二行输出一个表情 -_-#。
输入样例 1:
Hello!
are you there?
wantta chi1 huo3 guo1?
that’s so li hai le
our story begins from chi1 huo3 guo1 le
.
输出样例 1:
5
3 2
输入样例 2:
Hello!
are you there?
wantta qi huo3 guo1 chi1huo3guo1?
that’s so li hai le
our story begins from ci1 huo4 guo2 le
.
输出样例 2:
5
-_-#
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
#include<cstdio>
using namespace std;
int main(){
// string s;
char s[110];
cin.getline(s,109);
//getline(cin,s,'\n');
//get_s(s,109);
//scanf("%[^\n]",s);
int k=0,l=0;
int sum=0;
while(strcmp(s,".")!=0){
if(strstr(s,"chi1 huo3 guo1")!=NULL){
sum++;
if(l==0){
l=k+1;
}
}
k++;
//get_s(s,109);
cin.getline(s,109);
//s=input();
//scanf("%[^\n]",s);
// getline(cin,s,'\n');
}
cout<<k<<endl;
if(sum){
cout<<l<<' '<<sum<<endl;
}else cout<<"-_-#"<<endl;
return 0;
}
#7-45 统计数字字符和空格
本题要求编写程序,输入一行字符,统计其中数字字符、空格和其他字符的个数。建议使用switch语句编写。
输入格式:
输入在一行中给出若干字符,最后一个回车表示输入结束,不算在内。
输出格式:
在一行内按照
blank = 空格个数, digit = 数字字符个数, other = 其他字符个数
的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。
输入样例:
在这里给出一组输入。例如:
Reold 12 or 45T
输出样例:
在这里给出相应的输出。例如:
blank = 3, digit = 4, other = 8
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
string s;
getline(cin,s);
int shu=0,kon=0,ot=0;
for(int i=0;i<s.length();i++){
if(s[i]==' ') kon++;
else if(isdigit(s[i])) shu++;
else ot++;
}
cout<<"blank = "<<kon<<", digit = "<<shu<<", other = "<<ot<<endl;
return 0;
}
#7-46 强迫症
小强在统计一个小区里居民的出生年月,但是发现大家填写的生日格式不统一,例如有的人写 199808,有的人只写 9808。有强迫症的小强请你写个程序,把所有人的出生年月都整理成 年年年年-月月 格式。对于那些只写了年份后两位的信息,我们默认小于 22 都是 20 开头的,其他都是 19 开头的。
输入格式:
输入在一行中给出一个出生年月,为一个 6 位或者 4 位数,题目保证是 1000 年 1 月到 2021 年 12 月之间的合法年月。
输出格式:
在一行中按标准格式 年年年年-月月 将输入的信息整理输出。
输入样例 1:
9808
输出样例 1:
1998-08
输入样例 2:
0510
输出样例 2:
2005-10
输入样例 3:
196711
输出样例 3:
1967-11
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int n;
cin>>n;
int sum=0,num=0;
sum=n/100;
if(sum<22)sum+=2000;
else if(sum<100)sum+=1900;
num=n%100;
if(num<10)cout<<sum<<"-0"<<num;
else cout<<sum<<"-"<<num;
return 0;
}
#7-47 大笨钟的心情
有网友问:未来还会有更多大笨钟题吗?笨钟回复说:看心情……
本题就请你替大笨钟写一个程序,根据心情自动输出回答。
输入格式:
输入在一行中给出 24 个 [0, 100] 区间内的整数,依次代表大笨钟在一天 24 小时中,每个小时的心情指数。
随后若干行,每行给出一个 [0, 23] 之间的整数,代表网友询问笨钟这个问题的时间点。当出现非法的时间点时,表示输入结束,这个非法输入不要处理。题目保证至少有 1 次询问。
输出格式:
对每一次提问,如果当时笨钟的心情指数大于 50,就在一行中输出 心情指数 Yes,否则输出 心情指数 No。
输入样例:
80 75 60 50 20 20 20 20 55 62 66 51 42 33 47 58 67 52 41 20 35 49 50 63
17
7
3
15
-1
输出样例:
52 Yes
20 No
50 No
58 Yes
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
int a[24];
for(int i=0;i<24;i++){
cin>>a[i];
}
int x;
cin>>x;
while(0<=x&&x<=23){if(a[x]>50)cout<<a[x]<<" Yes"<<endl;
else cout<<a[x]<<" No"<<endl;cin>>x;}
return 0;
}
#7-48 输出倒三角图案
本题要求编写程序,输出指定的由“*”组成的倒三角图案。
输入格式:
本题目没有输入。
输出格式:
按照下列格式输出由“*”组成的倒三角图案。
选php语言直接复制粘贴
#7-49 计算物体自由下落的距离
一个物体从100米的高空自由落下。编写程序,求它在前3秒内下落的垂直距离。设重力加速度为10米/秒
2
。
输入格式:
本题目没有输入。
输出格式:
按照下列格式输出
height = 垂直距离值
结果保留2位小数。
选php语言直接复制粘贴
#7-50 计算分段函数[2]
本题目要求计算下列分段函数f(x)的值:
f2-11
注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。
输入格式:
输入在一行中给出实数x。
输出格式:
在一行中按“f(x) = result”的格式输出,其中x与result都保留两位小数。
输入样例1:
10
输出样例1:
f(10.00) = 3.16
输入样例2:
-0.5
输出样例2:
f(-0.50) = -2.75
#include<bits/stdc++.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main(){
double x;
cin>>x;
double sum=0;
if(x>=0)sum=sqrt(x);
else sum=pow(x+1,2)+2*x+pow(x,-1);
printf("f(%.2f) = %.2f",x,sum);
return 0;
}