admin管理员组

文章数量:1647848


目录

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 ++ 

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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; 
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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;
}

#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

#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