目录
1001: a+b
1002: 分铅笔
1003: 求圆的面积
1004: 正整数的位数
1005: 英文字母的字母表位序
1006: 两个整数的四则运算
1007: 三位数的数位分离
1008: 压岁钱存款
1009: 等差数列求和
1010: 输出字符ASCII码值的2倍
1011: 虫子吃苹果
1012: 三个整数的和
1013: 身份证求出生日期
1014: 鸡兔同笼
1015: 计算时间
1016: 计算国民生产总值增长倍数
1017: 计算贷款还款时间
1018: 交换变量
1019: 译密码(一)
1020: 从小到大输出三个整数
1021: positive, negative, or zero
1022: 龟兔赛跑
1023: 一元二次方程求解
1024: 奇偶判断
1025: 是否闰年
1026: 两个整数中的较大者
1027: 成绩等级
1028: 向0舍入
1029: 求最大数与最小数
1030: 四则运算
1031: 国庆促销
1032: 求平方根
1033: 分段函数求值
1034: 求建筑物高度
1035: 字母排序
1036: 加班费
1037: 某年某月的天数
1038: 蚂蚁的位置
1039: 吃水果
1040: 求m+(m+1)+…+n
1041: 多用例测试
1042: 求使1+2+…+i>=n成立的最小整数 i
1043: 质数判断
1044: 求1-2/3+3/5-4/7+5/9-6/11+…的前n项和
1045: 质数判断(使用break语句)
1046: 输出a到b之间的不能被3整除的整数
1047: 百文买百鸡
1048: 求a到b之间存在多少个素数
1049: 百文买百鸡(增加无解输出)
1050: 正整数的位数(while实现)
#include <math.h>函数的使用方法与具体样例解析
解题方法c++ 和 c 构成
1001: a+b
题目描述
计算两个整数的和。
输入
输入两个整数,两个整数用空格隔开。
输出
输出为两个整数的和,单独占一行。
样例输入
1 2
样例输出
3
源代码
c ++ 文章来源:https://www.toymoban.com/news/detail-720796.html
#include <iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
cout<<a+b;
return 0;
}
c
a,b都是整型,所以scanf用%d,所得答案c也是整型,printf用%d
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
int c = a + b;
printf("%d",c);
return 0;
}
1002: 分铅笔
题目描述
有m支铅笔分给n位同学(且m>n),请问每位同学平均可分几支?还剩几支?
输入
输入两个整数m和n,分别表示铅笔的总数和学生的人数(m>n)。
输出
输出两个整数,以逗号分开,分别表示每位同学平均分配的数量及剩余的铅笔数量
样例输入
163 32
样例输出
5,3
源代码
每位同学可分得的铅笔数为m / n
剩余铅笔数为m % n
c ++
#include <iostream>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
cout<<m/n<<','<<m%n;
return 0;
}
c
#include <stdio.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
printf("%d,%d",m / n,m % n);
return 0;
}
1003: 求圆的面积
题目描述
求半径为r的圆的面积(令π=3.14)。
输入
输入一个浮点类型的数r表示圆的半径。
输出
该圆的面积。
样例输入
2.3
样例输出
16.6106
源代码
#define 为宏定义,可以理解为“起外号”的思想,#define PI 3.14的意思即为PI可以被使用,且PI的值为3.14,若不懂宏定义的原理,直接在main函数当中
double PI = 3.14;
也可起到同样的效果
c ++
#include <iostream>
#include <iomanip>
const double PI = 3.14;
using namespace std;
int main()
{
double r;
cin>>r;
cout<<setiosflags(ios::fixed)<<setprecision(4)<<PI*r*r;
return 0;
}
c
#include <stdio.h>
#define PI 3.14
int main()
{
double r;
scanf("%lf",&r);
printf("%.4lf",r * r * PI);
return 0;
}
1004: 正整数的位数
题目描述
输入一个正整数,输出其位数。
输入
一个正整数
输出
正整数的位数
样例输入
123
样例输出
3
源代码
#include <math.h>即库数学函数,声明此头文件之后可以使用log函数,也就是我们高中所学的对数函数,当数字n为个位数的时候,log10(n) < log10(10),即log10(n)介于0和1(取不到)之间,当n为十位数的时候,log10(10) <= log10(n) < log10(100),即log(n)介于1和2(取不到)之间,由于我们是按照整型输出进行存储的,因此计算机会自动抹除小数的部分从而保留整数,因此我们在使用log10(n)对于n进行对数运算的时候,得到的答案总是等于n的位数减1,因此ans也就显而易见了
c ++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
cin>>n;
int ans=log10(n)+1;
cout<<ans;
return 0;
}
c
#include <stdio.h>
#include <math.h>
int main()
{
int n;
scanf("%d",&n);
int ans = log10(n) + 1;
printf("%d",ans);
return 0;
}
1005: 英文字母的字母表位序
题目描述
输入一个小写英文字符,输出其在英文字母表中的排序。
输入
一个小写英文字符。
输出
该字符在英文字母表中的排序。
样例输入
c
样例输出
3
源代码
根据ASCII码,注意输入的是小写字母,为了得到某个字符的位次,我们可以用一个整型变量来存某个字符位于第几个,举个例子,假设c = 'a',int size = c - 'a',那么得到的size为0而并非1,这也是我们ans要加1的理由
c ++
#include <iostream>
using namespace std;
int main()
{
char c;
cin>>c;
int ans = c - 'a' + 1;
cout<<ans;
return 0;
}
c
#include <stdio.h>
int main()
{
char c;
scanf("%c",&c);
int ans = c - 'a' + 1;
printf("%d",ans);
return 0;
}
1006: 两个整数的四则运算
题目描述
输入两个整数a和b,请你设计一个程序,计算并输出它们的和、差、积、整数商及余数。
输入
输入只有两个正整数a、b。
输出
输出占一行,包括两个数的和、差、积、商及余数,数据之间用一个空格隔开。
样例输入
1 2
样例输出
3 -1 2 0 1
源代码
很简单的四则运算
c ++
#include <iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
cout<<a+b<<" "<<a-b<<" "<<a*b<<" "<<a/b<<" "<<a%b;
return 0;
}
c
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d %d %d %d %d",a + b,a - b,a * b,a / b,a % b);
return 0;
}
1007: 三位数的数位分离
题目描述
从键盘输入一个任意的三位正整数,分别求出其个位、十位和百位上的数字。
输入
输入任意的一个三位正整数
输出
依次输出个位、十位、百位上的数字。以空格间隔,但最后一个数据的后面没有空格,直接换行。
样例输入
123
样例输出
3 2 1
源代码
样例解释:
123 / 100 = 1得到百位
(123 - 1 * 100) / 10 = 2得到十位
123 % 10 = 3得到个位
c ++
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int ans1 = n / 100;
int ans2 = (n - ans1*100) / 10;
int ans3 = n % 10;
cout<<ans3<<' '<<ans2<<' '<<ans1;
return 0;
}
c
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int ans1 = n / 100;
int ans2 = (n - ans1*100) / 10;
int ans3 = n % 10;
printf("%d %d %d",ans3,ans2,ans1);
return 0;
}
1008: 压岁钱存款
题目描述
过年了,长辈们给小明发了很多压岁钱,妈妈向小明承诺如果把压岁钱存在妈妈处,则每过一年存款翻倍。
输入
两个用空格分隔的整数,分别表示小明的压岁钱存款数目m,和存在妈妈处的存款年限n。
输出
输出一个整数,代表小明能够得到的存款数目。
样例输入
100 2
样例输出
400
源代码
数学库函数#include <math.h>中pow函数的实践使用,pow函数适用于计算某个数的几次方,假设存在m,n,那么int ans = pow(m,n)之后,得到的ans即为m的n次方
c ++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
cout<<m*(pow(2,n));
return 0;
}
c
#include <stdio.h>
#include <math.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int ans = m*(pow(2,n));
printf("%d",ans);
return 0;
}
1009: 等差数列求和
题目描述
给出三个整数,分别表示等差数列的第一项、最后一项和公差,求该数列的和。
输入
输入三个整数,之间用空格隔开。第1个数作为首项,第2个数作为末项,第3个数作为公差。
输出
输出占一行,包含一个整数,为该等差数列的和。
样例输入
2 11 3
样例输出
26
源代码
高中数学基本知识的考察,等差数列的前n项和公式Sn = ((n) * (a1 + an))/(2),一定要注意括号的使用,运算符的优先级很重要也很难记,不必死记硬背,直接括住即可。首先我们根据a1、an、d来求出n,而后套用前n项和公式即可
c ++
#include <iostream>
using namespace std;
int main()
{
int a1,an,d;
cin>>a1>>an>>d;
int n = (an-a1) / d + 1;
cout<<(n*(a1+an)) / 2;
return 0;
}
c
#include <stdio.h>
int main()
{
int a1,an,d;
scanf("%d%d%d",&a1,&an,&d);
int n = (an-a1) / d + 1;
int Sn = (n*(a1+an)) / 2;
printf("%d",Sn);
return 0;
}
1010: 输出字符ASCII码值的2倍
题目描述
输入一个字符,将其对应的ASCII码值乘以2再输出
输入
输入一个字符。
输出
字符对应的ASCII码值*2。
样例输入
A
样例输出
130
源代码
样例解释:此处牵涉到类型转换,查阅ASCII码表可得知字符a(A)的ASCII码为65,为了得到a的ASCII码,使用强制类型转换,字符a是char型,也就是字符型,其ASCII码为int型,以%d为输出类型限制,输出a * 2,即可得到对应的ASCII码值乘2
c ++
#include <iostream>
using namespace std;
int main()
{
char c;
cin>>c;
int ans = c;
cout<<ans*2;
return 0;
}
c
#include <stdio.h>
int main()
{
char a;
scanf("%c",&a);
printf("%d",a * 2);
return 0;
}
1011: 虫子吃苹果
题目描述
小明买了一箱苹果共有n个,但不幸的是箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时后这箱苹果中还有多少个苹果没有被虫子吃过?
输入
输入三个整数n、x、y,分别表示一箱苹果的个数,虫子吃完一个苹果所需时间和已经过去的时间。
输出
剩余好苹果的个数。
样例输入
3 2 1
样例输出
2
源代码
注意苹果只要被虫子咬一口,就不能要了。我们可以利用双精度浮点型(单精度浮点型也可)来计算出我们已经吃过的苹果,注意若是duoble eaten = y / x的话将不能够得到一个浮点型数据,因为y与x皆为整型,所得结果也为整型,得到浮点型数据仅仅在y或者x乘1.0即可,此做法的目的为讲其中一个整型置为浮点型,从而得到浮点型的运算结果。而后根据浮点型结果进行判断,若是带小数,则证明除了被完整吃完的苹果之外还有苹果被咬,那么此苹果作废,利用数学库函数里的ceil向上取整,来得到被吃的苹果数,总数减去被吃的苹果数即为剩余苹果数
c ++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n,x,y;
cin>>n>>x>>y;
double eaten = (y*1.0) / x;
int eat = ceil(eaten);
cout<<n - eat;
return 0;
}
c
#include <stdio.h>
#include <math.h>
int main()
{
int n,x,y;
scanf("%d%d%d",&n,&x,&y);
double eaten = (y*1.0) / x;
int eat = ceil(eaten);
printf("%d",n - eat);
return 0;
}
1012: 三个整数的和
题目描述
求三个整数的和
输入
输入三个整数,三个整数用空格隔开。
输出
三个整数的和。
样例输入
1234567890 1234567890 1234567890
样例输出
3703703670
源代码
注意数据的范围,为10位数,而若是把数据设置为int则数据无法表达,超出了int的范围,所以变量要开long long长整型而并非int短整型
c ++
#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
ll a,b,c;
cin>>a>>b>>c;
cout<<a+b+c;
return 0;
}
c
#include <stdio.h>
int main()
{
long long a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
printf("%lld",a + b + c);
return 0;
}
1013: 身份证求出生日期
题目描述
输入一个公民身份证号,输出该公民的出生年月日。
输入
公民身份证号
输出
年月日(YYYY-MM-DD
样例输入
430622197811204019
样例输出
1978-11-20
源代码
对于这么长的一串数字,我们目前还没有学习字符串,但是我们可以使用scanf来进行输入,如测试样例所示,我们输出的遗传非常非常长的数字,这串数字甚至超过了远远long long的范围,因此,我们用scanf直接输入这串数字即可,提前定义自变量,在输入的这串数字当中选取其中几位对其赋值。首先我们先定义year,month,day,而后输入,注意,在对于自变量的赋值时我们通常使用的是“% + 自变量对应类型”的格式,观察样例,我们不需要前六位数字,因此使用“% + * + 位数”来抑制计算机的读入,即%*6d的意思是抑制前6位的读入,%4d读取四位作为year的值,%2d读取两位作为month的值,%2d读取2位作为day的值。在输出的时候我们要注意自动补0,何为自动补0?假使我们的year是233年,month是1,day是1,输出的时候就要按照0233-01-01的格式输出,printf之中的含义就是%04d(4位年份,不够补0),%02d(2位月份,不够补0),%02d(2位日份,不够补0)
c ++
#include <iostream>
using namespace std;
int main()
{
int year,month,day;
scanf("%*6d%4d%2d%2d%*4d",&year,&month,&day);
printf("%04d-%02d-%02d",year,month,day);
return 0;
}
c
#include <stdio.h>
int main()
{
int year,month,day;
scanf("%*6d%4d%2d%2d%*4d",&year,&month,&day);
printf("%04d-%02d-%02d",year,month,day);
return 0;
}
1014: 鸡兔同笼
题目描述
鸡兔同笼,共有n个头,m条腿,求鸡和兔子各有多少只。
输入
输入头数和腿数。
输出
鸡和兔子的只数。
样例输入
35 94
样例输出
23 12
源代码
经典的小学奥数题,二元方程求解:设头总数为n,脚总数为m
方程一:chi = n - rab鸡的个数等于n - 兔子个数
方程二:rab = (m - 2 * n) / 2兔子的个数等于总腿数减去鸡脚总数和兔子收起两只脚的个数除以2
假设我们使所有兔子收起两只脚,那么此时在地上的总脚数为n * 2,剩余的脚均为兔子的另两只脚,除以2即可得到兔子个数,两个方程结合求解
c ++
#include <iostream>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int rab,chi;
rab = (m - 2 * n) / 2;
chi = n - rab;
cout<<chi<<" "<<rab;
return 0;
}
c
#include <stdio.h>
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int rab,chi;
rab = (m - 2 * n) / 2;
chi = n - rab;
printf("%d %d",chi,rab);
return 0;
}
1015: 计算时间
题目描述
小明的家距离学校很远,小明想知道从家里出发到学校耗费了多少时间
输入
输入用空格隔开的四个整数,分别代表从家出发的时、分和到校的时、分。
输出
输出用空格隔开的两个整数,代表总共花了多少小时多少分钟。
样例输入
12 45 13 56
样例输出
1 11
源代码
不必考虑借位,直接全部转化为分钟总数处理即可
c ++
#include <iostream>
using namespace std;
int main()
{
int h1,m1,h2,m2;
cin>>h1>>m1>>h2>>m2;
int sum = h2 * 60 + m2 - h1 * 60 - m1;
cout<<sum / 60<<" "<<sum % 60;
return 0;
}
c
#include <stdio.h>
int main()
{
int h1,m1,h2,m2;
scanf("%d%d%d%d",&h1,&m1,&h2,&m2);
int sum = h2 * 60 + m2 - h1 * 60 - m1;
printf("%d %d",sum / 60,sum % 60);
return 0;
}
1016: 计算国民生产总值增长倍数
题目描述
假如我国国民生产总值的年增长率为7%,计算10年后我国国民生产总值与现在相比增长多少百分比(倍数)。计算公式为p=(1+r)n
其中:r为年增长率,n为年数,p为与现在相比的倍数
对于求an, C语言的数学库函数中有求指数的函数pow(a, n)
输入
无,增长率与年数以赋值的方式给出
输出
p=增长倍数,结果保留两位小数,注意末尾的换行
样例输入
无
样例输出
p=1.97
源代码
利用数学库函数pow求解,在printf当中,%m.nlf表示对于浮点数进行宽度为m,保留位数为n的输出
c ++
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
double r = 0.07;
int n = 10;
cout<<"p="<<setiosflags(ios::fixed)<<setprecision(2)<<pow(1+r,n)<<endl;
return 0;
}
c
#include <stdio.h>
#include <math.h>
int main()
{
double r = 0.07;
int n = 10;
printf("p=%.2lf",pow(1+r,n));
return 0;
}
1017: 计算贷款还款时间
题目描述
某人为购房,从银行贷款30万元(d),准备按月还款6000元(p),月利率为1%(r),计算还款月数(m,即多少月还清贷款)。对求得的月份取小数点后一位(四舍五入)。
计算还清贷款月数m的计算公式如下:
可以将公式改写为
C语言数学库函数中有求对数的函数log10,是求以10为底的对数,log10(p)表示logp
输入
无
输出
m=计算出的贷款还款月数,精确到小数点后1位,注意末尾的换行。
样例输入
无
样例输出
m=69.7
源代码
利用数学库函数求解
c ++
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
double r = 0.01;
int d = 300000;
int p = 6000;
cout<<"m="<<setiosflags(ios::fixed)<<setprecision(1)<<(log(p/(p-d*r)))/(log(1+r))<<endl;;
return 0;
}
c
#include <stdio.h>
#include <math.h>
int main()
{
double r = 0.01;
int d = 300000;
int p = 6000;
printf("m=%.1lf",(log(p/(p-d*r)))/(log(1+r)));
return 0;
}
1018: 交换变量
题目描述
编写程序,从键盘输入两个整数给变量x和y输出x和y。
在交换x和y中的值后,再输出x和y,验证两个变量中的值是否正确的进行了交换。
输入
1 2
输出
2 1
样例输入
1 2
样例输出
2 1
源代码
利用临时变量t来作为中间数,就像要交换两杯子的水一样,要拿一个空杯子来作为媒介
c ++
#include <iostream>
using namespace std;
int main()
{
int x,y;
cin>>x>>y;
swap(x,y);
cout<<x<<" "<<y;
return 0;
}
c
#include <stdio.h>
int main()
{
int x,y;
scanf("%d%d",&x,&y);
int t;
t = x;
x = y;
y = t;
printf("%d %d",x,y);
return 0;
}
1019: 译密码(一)
题目描述
写程序将字符串“China”译成密码,密码规律是:用原来的字母后面第四个字母代替原来的字母。例如,字母A后面第四个字母是E,用E代替A。因此,China应译为Glmre。
请编写一个程序,用赋初值的方法使c1, c2, c3, c4, c5这5个字符变量的值分别为'C', 'h', 'i', 'n', 'a',经过运算,使c1, c2, c3, c4, c5的值分别变为'G', 'l', 'm', 'r', 'e'
用printf函数输出这5个字符
输入
无
输出
Glmre,注意末尾的换行
样例输入
无
样例输出
Glmre
源代码
我们想要达到的目的是将目前的字符变为其后的第四个字符,对于字符的后移位或者前移位我们直接对其进行加几减几即可,注意是对于字符而对于字符串
c ++
#include <iostream>
using namespace std;
int main()
{
string s = "China";
for(int i = 0;i < s.size();i ++ )printf("%c",s[i]+4);
cout<<endl;
return 0;
}
c
#include <stdio.h>
int main()
{
char c1 = 'C',c2 = 'h',c3 = 'i',c4 = 'n',c5 = 'a';
printf("%c%c%c%c%c",c1 + 4,c2 + 4,c3 + 4,c4 + 4,c5 + 4);
return 0;
}
1020: 从小到大输出三个整数
题目描述
输入三个整数,按从小到大的顺序输出这三个数。
输入
三个整数。
输出
从小到大输出三个整数,以空格分隔。
样例输入
2 9 3
样例输出
2 3 9
源代码
三个if分支,注意不要使用if - else语句而要使用if语句,否则接口变少之后,后来交换之后满足交换条件的数据会无法交换,在交换的时候利用临时数据t来交换(顺序不可变)
c ++
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
if(a > b)swap(a,b);
if(a > c)swap(a,c);
if(b > c)swap(b,c);
cout<<a<<' '<<b<<' '<<c;
return 0;
}
c
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a > b)
{
int t;
t = a;
a = b;
b = t;
}
if(a > c)
{
int t;
t = a;
a = c;
c = t;
}
if(b > c)
{
int t;
t = b;
b = c;
c = t;
}
printf("%d %d %d",a,b,c);
return 0;
}
1021: positive, negative, or zero
题目描述
输入一个整数,判断该数是正数、负数还是零。
输入
一个整数
输出
该数为正数则输出“positive”,负数则输出“negative”,零则输出“zero”。
样例输入
3
样例输出
positive
源代码
简单的三个分支:整数,负数,0
c ++
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
if(n == 0)cout<<"zero";
else if(n > 0)cout<<"positive";
else if(n < 0)cout<<"negative";
return 0;
}
c
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n == 0)printf("zero");
else if(n > 0)printf("positive");
else if(n < 0)printf("negative");
return 0;
}
1022: 龟兔赛跑
题目描述
龟兔赛跑中,已知乌龟速度为a米每秒,兔子速度为b米每秒,龟兔赛跑的赛程总长度为s米,兔子在比赛中到达终点前的某一时刻睡着了(且仅睡着这一次),耽误了t秒的时间,如果乌龟赢了输出"Turtle win",兔子赢了输出"Rabbit win",否则输出"Tie"。
输入
输入四个用空格隔开的整数,分别代表a,b,s,t。
输出
如果乌龟赢了输出"Turtle win",兔子赢了输出"Rabbit win",否则输出"Tie"。
样例输入
3 6 12 2
样例输出
Tie
源代码
rabt表示兔子所用的时间,turt表示乌龟所用的时间,注意在进行除法运算的时候,若是用整型数据除以整型数据,对于其中的一个整型数据要加以乘1.0操作,而后就是简单的比较
c ++
#include <iostream>
using namespace std;
int main()
{
int a,b,s,t;
cin>>a>>b>>s>>t;
double rabt = (s * 1.0) / b + t;
double turt = (s * 1.0) / a;
if(rabt < turt)cout<<"Rabbit win";
else if(rabt > turt)cout<<"Turtle win";
else if(rabt == turt)cout<<"Tie";
return 0;
}
c
#include <stdio.h>
int main()
{
int a,b,s,t;
scanf("%d%d%d%d",&a,&b,&s,&t);
double rabt = (s * 1.0) / b + t;
double turt = (s * 1.0) / a;
if(rabt < turt)printf("Rabbit win");
else if(rabt > turt)printf("Turtle win");
else if(rabt == turt)printf("Tie");
return 0;
}
1023: 一元二次方程求解
题目描述
输入a、b、c,求一元二次方程ax2+bx+c=0的解。
输入
三个整数a、b、c。
输出
方程ax2+bx+c=0的解(保留两位精度),a=0则输出“This is not a quadratic equation”。
样例输入
1 -2 1
样例输出
1.00
提示
输入样例2:3 2 1 输出:-0.33+0.47i -0.33-0.47i
输入样例3:3 2 -1 输出:0.33 -1.00
源代码
我们高中所学的一元二次方程仅仅有两个实数解、唯一实数解、无解这三种情况,事实上在真正的一元二次方程当中,高中所学的无解仅仅是无实数解,其真正为有虚数解。分割这三种情况的标志就是delta,也就是b^2 - a * c,当delta大于0,有两个实数解,当delta等于0,有唯一实数解,当delta小于0,有两个虚数解。在这里,两个实数解和唯一实数解的求法我们不再赘述。虚数解属于是一个复数,也是我们高中学过的概念,复数的实部为(-b * 1.0) / (2 * a),负数的虚部为(sqrt(-delta)) / (2 * a),答案为:“实部 + 虚部i”和“实部 - 虚部i”的形式,注意特判a = 0的情况
c ++
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
if(a == 0)
{
cout<<"This is not a quadratic equation";
return 0;
}
double delta = b * b - 4 * a * c;
if(delta == 0)
{
double ans = (-b * 1.0 ) / (2 * a);
cout<<setiosflags(ios::fixed)<<setprecision(2)<<ans;
}
else if(delta > 0)
{
double ans1 = (-b * 1.0 + sqrt(delta)) / (2 * a);
double ans2 = (-b * 1.0 - sqrt(delta)) / (2 * a);
cout<<setiosflags(ios::fixed)<<setprecision(2)<<ans1<<' '<<ans2;
}
else if(delta < 0)
{
double real = (-b * 1.0) / (2 * a);
double imag = (sqrt(-delta) * 1.0 ) / (2 * a);
cout<<setiosflags(ios::fixed)<<setprecision(2)<<real<<'+'<<imag<<'i'<<' '<<real<<'-'<<imag<<'i';
}
return 0;
}
c
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a == 0)
{
printf("This is not a quadratic equation");
return 0;
}
double delta = b * b - 4 * a * c;
if(delta == 0)
{
double ans = (-b * 1.0 ) / (2 * a);
printf("%.2lf",ans);
}
else if(delta > 0)
{
double ans1 = (-b * 1.0 + sqrt(delta)) / (2 * a);
double ans2 = (-b * 1.0 - sqrt(delta)) / (2 * a);
printf("%.2lf %.2lf",ans1,ans2);
}
else if(delta < 0)
{
double real = (-b * 1.0) / (2 * a);
double imag = (sqrt(-delta) * 1.0 ) / (2 * a);
printf("%.2lf+%.2lfi %.2lf-%.2lfi",real,imag,real,imag);
}
return 0;
}
1024: 奇偶判断
题目描述
输入一个整数,判断该数的奇偶性(“odd”或“even”)。
输入
一个整数。
输出
奇数则输出“odd”,偶数则输出“even”
样例输入
7
样例输出
odd
源代码
奇数对2取余等于1,偶数对2取余等于0
c ++
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
if(n&1)cout<<"odd";
else cout<<"even";
return 0;
}
c
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n % 2 == 1)printf("odd");
else printf("even");
return 0;
}
1025: 是否闰年
题目描述
输入年份year,判断该年是否为闰年。
输入
输入一个整数代表年份
输出
若该年是闰年则输出“year is a leap year”,否则输出“year is not a leap year”。
样例输入
2021
样例输出
2021 is not a leap year
源代码
闰年的判断标准有两个,符合任意其中一个即可,闰年可以被4整除但是不可以被100整除,闰年可以被400整除
c ++
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
if((n % 4 == 0 && n % 100 != 0)||(n % 400 == 0))cout<<n<<" is a leap year";
else cout<<n<<" is not a leap year";
return 0;
}
c
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
if((n % 4 == 0 && n % 100 != 0)||(n % 400 == 0))printf("%d is a leap year",n);
else printf("%d is not a leap year",n);
return 0;
}
1026: 两个整数中的较大者
题目描述
输入两个整数,输出其中的较大数
输入
两个整数
输出
两个整数中的较大数
样例输入
6 15
样例输出
15
源代码
c ++
#include <iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
cout<<max(a,b);
return 0;
}
c
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
if(a >= b)printf("%d",a);
else printf("%d",b);
return 0;
}
1027: 成绩等级
题目描述
给定一个百分制成绩, 请根据百分制成绩输出其对应的等级。转换关系如下:90分及以上为'A',80~89为'B', 70~79为'C', 60~69为'D',60分以下为'E'。
输入
一个百分制成绩(0~100的整数)
输出
成绩对应的等级。
样例输入
90
样例输出
A
源代码
注意对于不同的区间进行成绩等级分配,严格注意区间的闭合
c ++
#include <iostream>
using namespace std;
int main()
{
int score;
cin>>score;
if(score >= 0 && score < 60)cout<<"E";
else if(score >= 60 && score < 70)cout<<"D";
else if(score >= 70 && score < 80)cout<<"C";
else if(score >= 80 && score < 90)cout<<"B";
else if(score >= 90)cout<<"A";
return 0;
}
c
#include <stdio.h>
int main()
{
int score;
scanf("%d",&score);
if(score >= 0 && score < 60)printf("E");
else if(score >= 60 && score < 70)printf("D");
else if(score >= 70 && score < 80)printf("C");
else if(score >= 80 && score < 90)printf("B");
else if(score >= 90)printf("A");
return 0;
}
1028: 向0舍入
题目描述
输入一个双精度浮点数,将其向0舍入到整数。向0舍入的含义是“正数向下舍入,负数向上舍入”。
输入
输入一个双精度浮点数。
输出
该双精度浮点数向0舍入的整数。
样例输入
3.14
样例输出
3
源代码
可以使用数学库函数,ceil像上取整,floor向下取整,或者利用if语句进行判断,首先我们对于双精度浮点型数据进行输入,而后另外定义一个整型变量等于其值,这样就完成了抹除双精度浮点型的小数数据,而后对于其进行判断,若是正数且浮点型数据大于整型数据则向下取整,反之负数则向上取整,0则不变
c ++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double n;
cin>>n;
int ans = 0;
if(n < 0)ans = ceil(n);
else if(n > 0)ans = floor(n);
cout<<ans;
return 0;
}
c
#include <stdio.h>
int main()
{
double a;
scanf("%lf",&a);
int b = a;
int ans = 0;
if(a > 0 && a >= b)ans = b;
else if(a < 0 && a <= b)ans = b;
printf("%d",ans);
return 0;
}
1029: 求最大数与最小数
题目描述
输入三个整数,输出最大数和最小数
输入
输入三个整数a、b、c。
输出
三个数中的最大数和最小数(以空格分隔)
样例输入
3 7 9
样例输出
9 3
源代码
if - else语句筛选
c ++
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
cout<<max(a,max(b,c))<<' '<<min(a,min(b,c));
return 0;
}
c
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a > b)
{
int t;
t = a;
a = b;
b = t;
}
if(a > c)
{
int t;
t = a;
a = c;
c = t;
}
if(b > c)
{
int t;
t = b;
b = c;
c = t;
}
printf("%d %d",c,a);
return 0;
}
1030: 四则运算
题目描述
输入运算数和四则运算符,输出计算结果。
输入
输入两个浮点数和一个操作符。
输出
输出计算结果(精度为2)。
样例输入
2.3 5.6 +
样例输出
7.90
源代码
注意scanf在对于数据进行输入的时候会读入所有输入的字符,在数据输入的过程中,我们数据之间往往会有一个空格,为了避免c被赋值为空格,我们使用%*c来抑制一个字符的读入,这样的话运算符就能够正常被赋值,答案也就能正确输出了
c ++
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double a,b;
char c;
cin>>a>>b;
getchar();
cin>>c;
if(c == '+')cout<<setiosflags(ios::fixed)<<setprecision(2)<<a+b;
else if(c == '-')cout<<setiosflags(ios::fixed)<<setprecision(2)<<a-b;
else if(c == '*')cout<<setiosflags(ios::fixed)<<setprecision(2)<<a*b;
else if(c == '/')cout<<setiosflags(ios::fixed)<<setprecision(2)<<a/b;
return 0;
}
c
#include <stdio.h>
int main()
{
double a,b;
char c;
scanf("%lf%lf%*c%c",&a,&b,&c);
if(c == '+')printf("%.2lf",a+b);
else if(c == '-')printf("%.2lf",a-b);
else if(c == '*')printf("%.2lf",a*b);
else if(c == '/')printf("%.2lf",a/b);
return 0;
}
1031: 国庆促销
题目描述
商场国庆促销,购物500元以下无折扣;购物500元(含)以上95折;购物1000元(含)以上9折;购物3000元(含)以上85折;购物5000元(含)以上8折。根据消费金额,计算用户实际需要支付的数目
输入
输入一个实数,表示消费金额。
输出
输出一个实数,表示用户实际需要支出的数目,保留两位小数。
样例输入
6000
样例输出
4800.00
源代码
注意区间的开闭
c ++
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double n;
cin>>n;
double ans = 0;
if(n < 500)ans = n;
else if(n >= 500 && n < 1000)ans = n * 0.95;
else if(n >= 1000 && n < 3000)ans = n * 0.9;
else if(n >= 3000 && n < 5000)ans = n * 0.85;
else if(n >= 5000)ans = n * 0.8;
cout<<setiosflags(ios::fixed)<<setprecision(2)<<ans;
return 0;
}
c
#include <stdio.h>
int main()
{
double n;
scanf("%lf",&n);
double ans = 0;
if(n < 500)ans = n;
else if(n >= 500 && n < 1000)ans = n * 0.95;
else if(n >= 1000 && n < 3000)ans = n * 0.9;
else if(n >= 3000 && n < 5000)ans = n * 0.85;
else if(n >= 5000)ans = n * 0.8;
printf("%.2lf",ans);
return 0;
}
1032: 求平方根
题目描述
从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。
要求在输入数据后先对其进行检查是否为小于1000的正数。若不是,则输出一行错误信息,信息内容为:“invalid data!”
输入
一个小于1000的正数
输出
输出数据的平方根,仅输出整数部分。注意末尾的换行。
样例输入
108.7
样例输出
10
源代码
数学库函数sqrt(n)来表示n的平方根
c ++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double n;
cin>>n;
if(n >= 0 && n < 1000)
{
cout<<int(sqrt(n));
return 0;
}
cout<<"invalid data!";
return 0;
}
c
#include <stdio.h>
#include <math.h>
int main()
{
double n;
scanf("%lf",&n);
if(n >= 0 && n < 1000)
{
printf("%.0lf",sqrt(n));
}
else printf("invalid data!");
return 0;
}
1033: 分段函数求值
题目描述
有一个函数y=f(x)的表达式如下:
当x<1时,y=x
当1<=x<10时,y=2x-1
当x>=10时,y=3x-11
输入x的值,输出y相应的值。
末尾换行
输入
一个实数
输出
y=计算的结果,保留2位小数,注意末尾换行。
样例输入
5.1
样例输出
y=9.20
源代码
c ++
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double x;
cin>>x;
double y;
if(x < 1)y = x;
else if(x >= 1 && x <10)y = 2 * x - 1;
else if(x >=10)y = 3 * x - 11;
cout<<setiosflags(ios::fixed)<<setprecision(2)<<"y="<<y<<endl;
return 0;
}
c
#include <stdio.h>
int main()
{
double x;
scanf("%lf",&x);
double y;
if(x < 1)y = x;
else if(x >= 1 && x <10)y = 2 * x - 1;
else if(x >=10)y = 3 * x - 11;
printf("y=%.2lf",y);
return 0;
}
1034: 求建筑物高度
题目描述
有4个圆塔,圆心分别为(2, 2)、(-2, 2)、(-2, -2)、(2, -2),圆半径为1,如下图所示。这4个塔的高度为10米(m),塔以外无建筑物。
现输入任一点的坐标,求该点的建筑物高度(塔外的高度为零)。
输入
输入以圆括号括起来的两个数字,两个数字之间以逗号(,)分隔,格式如:(x,y)
如下为正确输入:
(1.5,1.9)
浮点型变量,请定义为float类型
输出
该建筑物的高度,末尾换行
样例输入
(1.8,1.9)
样例输出
10
源代码
本题就是输入二维坐标系中的横纵坐标,若该点在四个圆之内,则高度为10,其余高度为0,注意输入的时候不仅仅是坐标点数据的输入,还有括号和逗号的输入,所以scanf里面要包含括号逗号
c ++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double x,y;
scanf("(%lf,%lf)",&x,&y);
int h = 0;
if(sqrt(pow(x-2,2))+pow(y-2,2) <= 1)h = 10;
else if(sqrt(pow(x+2,2))+pow(y-2,2) <= 1)h = 10;
else if(sqrt(pow(x-2,2))+pow(y+2,2) <= 1)h = 10;
else if(sqrt(pow(x+2,2))+pow(y+2,2) <= 1)h = 10;
cout<<h<<endl;
return 0;
}
c
#include <stdio.h>
#include <math.h>
int main()
{
double x,y;
scanf("(%lf,%lf)",&x,&y);
int h = 0;
if(sqrt(pow(x-2,2))+pow(y-2,2) <= 1)h = 10;
else if(sqrt(pow(x+2,2))+pow(y-2,2) <= 1)h = 10;
else if(sqrt(pow(x-2,2))+pow(y+2,2) <= 1)h = 10;
else if(sqrt(pow(x+2,2))+pow(y+2,2) <= 1)h = 10;
printf("%d",h);
return 0;
}
1035: 字母排序
题目描述
输入三个字母,按字母表顺序输出这三个字母。
输入
三个字母
输出
按字母表顺序输出
样例输入
cba
样例输出
abc
源代码
和整数比较大小的方法一模一样,利用临时变量t
c ++
#include <iostream>
using namespace std;
int main()
{
char a,b,c;
cin>>a>>b>>c;
if(a > b)swap(a,b);
if(a > c)swap(a,c);
if(b > c)swap(b,c);
cout<<a<<b<<c;
return 0;
}
c
#include <stdio.h>
int main()
{
char a,b,c;
scanf("%c%c%c",&a,&b,&c);
if(a > b)
{
int t;
t = a;
a = b;
b = t;
}
if(a > c)
{
int t;
t = a;
a = c;
c = t;
}
if(b > c)
{
int t;
t = b;
b = c;
c = t;
}
printf("%c%c%c",a,b,c);
return 0;
}
1036: 加班费
题目描述
编写一个计算员工收入的程序,公司按照规定工时的工资10元/小时付给每个员工160个工时的薪水,按3倍的工资率付给160个工时以外的工资。
输入
输入员工的工时数,1个整数
输出
计算员工的收入
样例输入
20
样例输出
200
源代码
c ++
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int sum = 0;
if(n >= 0 && n <= 160)sum = n * 10;
else if(n > 160)sum = 10 * 160 + (n - 160) * 30;
cout<<sum;
return 0;
}
c
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int sum = 0;
if(n >= 0 && n <= 160)sum = n * 10;
else if(n > 160)sum = 10 * 160 + (n - 160) * 30;
printf("%d",sum);
return 0;
}
1037: 某年某月的天数
题目描述
输入x和y,输出x年y月有多少天。
输入
一行两个正整数x和y,分别表示年份和月份。x在int范围以内,y为1~12。
输出
一行一个整数,表示该年该月有多少天。
样例输入
2021 3
样例输出
31
源代码
一三五七八十腊,三十一天用不差,四六九十一三十天,闰年2月29天,平年28天
c ++
#include <iostream>
using namespace std;
int a[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int b[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
int year,month;
cin>>year>>month;
if((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0))
{
cout<<a[month];
return 0;
}
else cout<<b[month];
return 0;
}
c
#include <stdio.h>
int main()
{
int year,month;
scanf("%d%d",&year,&month);
if((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0))
{
if(month == 1||month == 3||month == 5||month == 7||month == 8||month == 10||month == 12)printf("31");
else if(month == 4||month == 6||month == 9||month == 11)printf("30");
else if(month == 2)printf("29");
}
else
{
if(month == 1||month == 3||month == 5||month == 7||month == 8||month == 10||month == 12)printf("31");
else if(month == 4||month == 6||month == 9||month == 11)printf("30");
else if(month == 2)printf("28");
}
return 0;
}
1038: 蚂蚁的位置
题目描述
有一只蚂蚁在一个圆上爬行,圆心坐标是(0,0),半径r=4.5,任意输入蚂蚁在圆上的坐标(x,y),判断这只蚂蚁是在圆内,圆周上,还是在圆外。
输入
两个浮点数x,y
输出
如果在圆内,输出in
如果在圆外,输出out
如果在圆上,输出on
样例输入
1.0 1.0
样例输出
in
源代码
利用高中的两点之间的坐标公式,求蚂蚁位置到圆心的距离s与圆半径r的关系
c ++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double x,y;
cin>>x>>y;
double s = sqrt(pow(x,2)+pow(y,2));
if(s < 4.5)cout<<"in";
else if(s == 4.5)cout<<"on";
else if(s > 4.5)cout<<"out";
return 0;
}
c
#include <stdio.h>
#include <math.h>
int main()
{
double x,y;
scanf("%lf%lf",&x,&y);
double s = sqrt(pow(x,2)+pow(y,2));
if(s < 4.5)printf("in");
else if(s == 4.5)printf("on");
else if(s > 4.5)printf("out");
return 0;
}
1039: 吃水果
题目描述
妈妈去超市买水果,她问小明想吃什么水果,现在超市只有五种水果,分别是Apple 苹果,Banana 香蕉,Cherry 樱桃,Durian 榴莲,Mango 芒果。如果小明说'A',就是想吃Apple,如果小明说'B',就是想吃Banana,如果小明说'C',就是想吃Cherry ,如果小明说'D',就是想吃Durian,如果小明随便说其它字母,妈妈就买Mango。请采用switch语句实现。
输入
水果的英文单词首字母的大小形式
输出
水果的英文单词
样例输入
A
样例输出
Apple
源代码
c ++
#include <iostream>
using namespace std;
int main()
{
char c;
cin>>c;
switch(c)
{
case 'A':cout<<"Apple";break;
case 'B':cout<<"Banana";break;
case 'C':cout<<"Cherry";break;
case 'D':cout<<"Durian";break;
default:cout<<"Mango";break;
}
return 0;
}
c
#include <stdio.h>
int main()
{
char c;
scanf("%c",&c);
switch(c)
{
case 'A':printf("Apple");break;
case 'B':printf("Banana");break;
case 'C':printf("Cherry");break;
case 'D':printf("Durian");break;
default:printf("Mango");break;
}
return 0;
}
1040: 求m+(m+1)+…+n
题目描述
求m+(m+1)+…+n。
输入
两个正整数m和n(m<=n)
输出
m加到n的和
样例输入
1 3
样例输出
6
源代码
利用for循环进行求解
c ++
#include <iostream>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
int sum = 0;
for(int i = m;i <= n;i ++)sum += i;
cout<<sum;
return 0;
}
c
#include <stdio.h>
int main()
{
int m,n;
scanf("%d%d",&m,&n);
int ans = 0;
for(int i = m;i <= n;i ++ )ans = ans + i;
printf("%d",ans);
return 0;
}
1041: 多用例测试
题目描述
输入多组整数,每组数据包含两个整数a和b,对每组数据输出a+b的结果。
输入
多组整数,每组一行,为两个以空格分隔的整数。
输出
对每组数据输出a+b的结果,每组结果占一行。
样例输入
1 2
3 4
样例输出
3
7
源代码
多实例测试在c语言当中利用while有两种表达方式,while(~scanf("%d%d",&a,&b))或者while(scanf("%d%d",&a,&b) != EOF),谨记即可
c ++
#include <iostream>
using namespace std;
int main()
{
int a,b;
while(cin>>a>>b)cout<<a+b<<endl;
return 0;
}
c
#include <stdio.h>
int main()
{
int a,b;
while(~scanf("%d%d",&a,&b))
{
printf("%d\n",a + b);
}
return 0;
}
1042: 求使1+2+…+i>=n成立的最小整数 i
题目描述
输入正整数n,求使1+2+…+i>=n成立的最小整数i。
输入
一个整数n。
输出
使1+2+…+i>=n成立的最小整数i。
样例输入
123
样例输出
16
源代码
跳出循环的时候是sum >=n的情况,但是此时i多执行了一次加一操作,所以要减去1
c ++
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int sum = 0,i;
for(i = 1;sum < n;i ++ )sum += i;
cout<<i-1;
return 0;
}
c
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int sum = 0,i;
for( i = 1;sum < n;i ++ )sum = sum + i;
printf("%d",i - 1);
return 0;
}
1043: 质数判断
题目描述
输入正整数n,判定它是否为素数(prime,又称质数)。
输入
一个正整数n。
输出
若n为质数则输出“Yes”,否则输出“No”。
样例输入
5
样例输出
Yes
源代码
1不是素数,素数只能够背其本身和1整除,也就是说,一旦某一个数对除了1和本身的数取余等于0,那么此数便不是素数,利用数学库函数sqrt可以缩小检验数的范围,从而实现更加快速的判断
c ++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
cin>>n;
if(n == 1)
{
cout<<"No";
return 0;
}
int flag = 1;
for(int i = 2;i <= sqrt(n);i ++ )
{
if(n % i == 0)
{
flag = 0;
break;
}
}
if(flag == 1)cout<<"Yes";
else cout<<"No";
return 0;
}
c
#include <stdio.h>
#include <math.h>
int main()
{
int n,flag = 1;
scanf("%d",&n);
if(n == 1)flag = 0;
else
{
for(int i = 2;i <= sqrt(n);i ++ )
{
if(n % i == 0)
{
flag = 0;
break;
}
}
}
if(flag == 1)printf("Yes");
else if(flag == 0)printf("No");
return 0;
}
1044: 求1-2/3+3/5-4/7+5/9-6/11+…的前n项和
题目描述
输入正整数n,求1-2/3+3/5-4/7+5/9-6/11+…的前n项和,结果保留3位小数。
输入
一个正整数n
输出
求1-2/3+3/5-4/7+5/9-6/11+...的前n项和。
样例输入
100
样例输出
0.391
源代码
num为英语单词分子的缩写,在这里代表分子,deno为英语单词分母的缩写,在这里代表分母,item为本项数据的值,即为num / deno,为了避免出现整型除以整型无法得到浮点型的情况我们多乘以一个1.0即可,注意每项数据的正负是交替变换的
c ++
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int n;
cin>>n;
double sum = 0;
int flag = 1;
for(int i = 1;i <= n;i ++ )
{
double item = (i * 1.0) / (2 * i - 1) * flag;
sum += item;
flag = - flag;
}
cout<<setiosflags(ios::fixed)<<setprecision(3)<<sum<<endl;
return 0;
}
c
#include <stdio.h>
#include <math.h>
int main()
{
int n,flag = 1;
scanf("%d",&n);
double sum = 0;
for(int i = 1;i <= n;i ++ )
{
double num = i;
double deno = 2 * i - 1;
double item = num / deno * flag;
sum = sum + item;
flag = - flag;
}
printf("%.3lf",sum);
return 0;
}
1045: 质数判断(使用break语句)
题目描述
输入正整数n,判定它是否为素数(prime,又称质数)。
输入
一个正整数n。
输出
若n为质数则输出“Yes”,否则输出“No”
样例输入
7
样例输出
Yes
源代码
若此数不是素数,直接break即可,减少无意义的数据判断
c ++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
cin>>n;
if(n == 1)
{
cout<<"No";
return 0;
}
int flag = 1;
for(int i = 2;i <= sqrt(n);i ++ )
{
if(n % i == 0)
{
flag = 0;
break;
}
}
if(flag == 1)cout<<"Yes";
else cout<<"No";
return 0;
}
c
#include <stdio.h>
#include <math.h>
int main()
{
int n,flag = 1;
scanf("%d",&n);
if(n == 1)flag = 0;
else
{
for(int i = 2;i <= sqrt(n);i ++ )
{
if(n % i == 0)
{
flag = 0;
break;
}
}
}
if(flag == 1)printf("Yes");
else if(flag == 0)printf("No");
return 0;
}
1046: 输出a到b之间的不能被3整除的整数
题目描述
输出a到b之间的不能被3整除的整数。
输入
两个正整数a、b。
输出
a到b之间的不能被3整除的整数,以空格分隔。
样例输入
1 10
样例输出
1 2 4 5 7 8 10
源代码
不能被3整除即对3取余不等于0
c ++
#include <iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
for(int i = a;i <= b;i ++ )
{
if(i % 3 != 0)cout<<i<<' ';
}
return 0;
}
c
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
for(int i = a;i <= b;i ++ )
{
if(i % 3 != 0)printf("%d ",i);
}
return 0;
}
1047: 百文买百鸡
题目描述
公鸡五文钱一只,母鸡三文钱一只,小鸡一文钱三只,用m文钱买m只鸡,公鸡、母鸡、小鸡各买多少只?
输入
正整数m。
输出
只输出一个解,即公鸡数量最少的那个解(输出公鸡、母鸡和小鸡的只数,以空格隔开)。
样例输入
100
样例输出
0 25 75
源代码
公鸡最少0只,最多m/5只,母鸡最少0只,最多m/3只,小鸡则为m - 公鸡只数 - 母鸡只数,若是有解条件则:小鸡只数乘三分之一 + 母鸡只数乘3 + 公鸡只数乘5 = m,为了避免浮点型数据在除法当中除不尽产生BUG,我们将等式两边同时乘3即可,得到有解条件为:i * 15 + j * 9 + k == m * 3
c ++
#include <iostream>
using namespace std;
int main()
{
int m;
cin >> m;
for(int i = 0;i <= m / 5;i ++ )
{
for(int j = 0;j <= m / 3;j ++ )
{
int k = m - i - j;
if(i * 15 + j * 9 + k == m * 3)
{
cout<<i<<' '<<j<<' '<<k;
return 0;
}
}
}
}
c
#include <stdio.h>
int main()
{
int m;
scanf("%d",&m);
for(int i = 0;i <= m / 5;i ++ )
{
for(int j = 0;j <= m / 3;j ++ )
{
int k = m - i - j;
if(k + j * 9 + i * 15 == m * 3)
{
printf("%d %d %d",i,j,k);
return 0;
}
}
}
}
1048: 求a到b之间存在多少个素数
题目描述
求a到b之间存在多少个素数。
输入
两个正整数a、b。
输出
a到b之间的全部素数的个数。
样例输入
100 200
样例输出
21
源代码
for循环之中嵌套判断素数的程序即可
c ++
#include <iostream>
#include <cmath>
using namespace std;
bool judge(int n)
{
if(n == 1)return false;
for(int i = 2;i <= sqrt(n);i ++ )
{
if(n % i == 0)return false;
}
return true;
}
int main()
{
int a,b;
cin >> a >> b;
int sum = 0;
for(int i = a;i <= b;i ++ )
{
if(judge(i))sum++;
}
cout<<sum;
return 0;
}
c
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,nums = 0;
scanf("%d%d",&a,&b);
for(int i = a;i <= b;i ++ )
{
if(i == 1)continue;
else
{
int flag = 1;
for(int j = 2;j <= sqrt(i);j ++ )
{
if(i % j == 0)
{
flag = 0;
break;
}
}
if(flag == 1)nums ++ ;
else continue;
}
}
printf("%d",nums);
return 0;
}
1049: 百文买百鸡(增加无解输出)
题目描述
公鸡五文钱一只,母鸡三文钱一只,小鸡一文钱三只,用m文钱买m只鸡,公鸡、母鸡、小鸡各买多少只?
输入
一个正整数m。
输出
若有解只输出一个解,即公鸡数量最少的那个解;若无解输出“No answer”。
样例输入
100
样例输出
0 25 75
源代码
加一个flag与break配合使用即可
c ++
#include <iostream>
using namespace std;
int main()
{
int m;
cin >> m;
for(int i = 0;i <= m / 5;i ++ )
{
for(int j = 0;j <= m / 3;j ++ )
{
int k = m - i - j;
if(i * 15 + j * 9 + k == m * 3)
{
cout<<i<<' '<<j<<' '<<k;
return 0;
}
}
}
cout<<"No answer";
return 0;
}
c
#include <stdio.h>
int main()
{
int m,flag = 0;
scanf("%d",&m);
for(int i = 0;i <= m / 5;i ++ )
{
if(flag == 1)break;
for(int j = 0;j <= m / 3;j ++ )
{
int k = m - i - j;
if(k + j * 9 + i * 15 == m * 3)
{
printf("%d %d %d",i,j,k);
flag = 1;
break;
}
}
}
if(flag == 0)printf("No answer");
return 0;
}
1050: 正整数的位数(while实现)
题目描述
输入一个正整数,输出其位数(用while语句实现)。
输入
一个正整数。
输出
正整数的位数。
样例输入
123
样例输出
3
源代码
c ++
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int ans = 0;
while(n > 0)
{
n /= 10;
ans ++;
}
cout<<ans;
return 0;
}
c文章来源地址https://www.toymoban.com/news/detail-720796.html
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int nums = 0;
while(n > 0)
{
nums ++ ;
n = n / 10;
}
printf("%d",nums);
return 0;
}
到了这里,关于HAUE河工计院OJ1001 - 1050题解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!