HAUE河工计院OJ1001 - 1050题解

这篇具有很好参考价值的文章主要介绍了HAUE河工计院OJ1001 - 1050题解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


目录

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的计算公式如下:

河南工程学院oj平台,学科竞赛,c++,c语言

可以将公式改写为

河南工程学院oj平台,学科竞赛,c++,c语言

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),塔以外无建筑物。

河南工程学院oj平台,学科竞赛,c++,c语言


现输入任一点的坐标,求该点的建筑物高度(塔外的高度为零)。 

输入

输入以圆括号括起来的两个数字,两个数字之间以逗号(,)分隔,格式如:(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文章来源地址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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • NEFU OJ Problem1487 时空乱流题解

    Problem:E Time Limit:1500ms Memory Limit:65535K 星际飞行员Alice在一次航行中遭遇了时空乱流,时空乱流将导致Alice乘坐的飞船在n个位面之间穿梭。 星际宇航局管理员Bob收到了Alice的求救信号,决定在某些位面上设立监测站,当Alice进入某个已经设立监测站的位面后,她会立即被拯救。

    2024年02月05日
    浏览(42)
  • 中科大OJ Verilog 在线评测题解 28-47

    最近跟着老师学习Verilog,做了中科大的练习题,将答案记录一下 题目描述 所有的数字电路都是由逻辑门和连线构成的,因此理论上来说都可以通过模块的连接和assign语句进行描述,然而在很多情况下这并不是最方便的一种方式,过程块提供了一种更加方便的描述方式,alw

    2024年02月03日
    浏览(32)
  • 中科大OJ Verilog 在线评测题解 100-105

    近跟着老师学习Verilog,做了中科大的练习题,将答案记录一下 题在哪儿 题目描述 在RV32I中,寄存器堆指32个通用寄存器的集合,具有专门的读写端口,可并发访问不同寄存器。 我们用5位数代表寄存器的端口号,需要注意的是:当待写入寄存器端口号为0时,往x0写入的数据总

    2024年02月03日
    浏览(37)
  • 湘大 XTU OJ 1256 湘潭大学 题解(非常详细):枚举

    1256 湘潭大学 湘潭大学简称 “XTU” ,作为即将成为湘大的一份子,怎么不能为湘大添砖加瓦了?现在给你一个 字符串 ,请你计算一下,从中选取字符, 最多能组成多少个“XTU”? 第一行是一个整数K,表示样例的个数。 以后每行一个字符串, 字符串只包含英文大写字母,

    2024年02月13日
    浏览(43)
  • 湘潭大学 湘大 XTU OJ 1271 Color 题解(非常详细)

    链接 1271 题面 Alice在玩一个游戏,她在一个m×n的格子里,随机涂黑k个格子。然后她每次可以把一行或者一列的格子染成红色,但是这一行中不能有黑色的格子。 请问她最多能把多少个格子涂成红色? 第一行是一个整数T(T≤100),表示样例的个数。 每个样例的第一行是m(1≤

    2024年02月11日
    浏览(39)
  • 湘潭大学 湘大 XTU OJ 1055 整数分类 题解(非常详细)

    整数分类 Description 按照下面方法对整数x进行分类:如果x是一个个位数,则x属于x类;否则将x的各位上的数码累加,得到一个新的x,依次迭代,可以得到x的所属类。比如说24,2+4=6,则24的类别数是6;39,3+9=12,1+2=3,则39的类别数是3。 输入        每行输入一个非负整数

    2024年02月12日
    浏览(38)
  • 湘大 XTU OJ:1406 String Game、1098 素数个数 题解(非常详细)

    1406 String Game Alice和Bob正在玩一个基于字符串的游戏,一开始, Alice和Bob分别拥有一个等长的字符串S1和S2 ,且这两个字符串只包含小写字母。 在每个回合中, Alice和Bob 必须 分别选择自己的字符串的某一个位置并把这个位置上的字母改变为其他小写字母 。 经过P个回合后,他

    2024年02月13日
    浏览(37)
  • 湘大 XTU OJ 1308 比赛 题解:循环结束的临界点+朴素模拟

    比赛 有 n个人要进行比赛 ,比赛规则如下: 假设每轮比赛的人是m,取 最大的k , k=2^t 且k≤m。 这k个人每2人举行一场比赛 ,胜利者进入一下轮,失败者被淘汰。 余下的m-k个人,不进行比赛,直接进入下一轮 直到决出冠军,比赛结束 。 比如有5个人参加比赛,第一轮举办

    2024年02月13日
    浏览(38)
  • 湘大 XTU OJ 1291 Buying Gifts 题解(非常详细):枚举 维护最小值 排序

    1291 Buying Gifts 快到年末了,Boss Liu准备在年会上发些礼物, 由于不想礼物的价格区别太大 ,Boss Liu希望 最好的礼物与最差的礼物价格相差越小越好 。 当然, 如果存在相同的选择,Boss Liu希望花的钱越少越好 。 Boss Liu把这个买礼物的任务给你,你决定写个程序来帮助自己计算

    2024年02月13日
    浏览(43)
  • 湘大 XTU OJ 1097 排序 题解:c++ 函数库的使用 快速排序 归并排序 冒泡排序

    1097 排序 Description N个整数,将其排序输出。 输入 第一行是一个整数K(1=K=20),表示有多少个样例, 每个样例的第一行是一个整数N(1=N=1,000) 和一个字符X,X为A时表示升序排序,为D时为降序排列;第二行为N个整数,每个整数都可以使用int表示, 每个之间用一个空格隔开。

    2024年02月13日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包