1. 最大公约数
题目描述
输入两个正整数,求其最大公约数。
假如输入
/*
测试数据有多组,每组输入两个正整数
*/
49 14
应当输出
/*
对于每组输入,请输出其最大公约数。
*/
7
#include<stdio.h>
int main(){
int a,b;
while(scanf("%d%d",&a,&b)!=EOF){
while(b!=0){
int temp = a%b;
a = b;
b = temp;
}
printf("%d
",a);
}
}
2. 最小公倍数
题目描述
给定两个正整数,计算这两个数的最小公倍数。
假如输入
/*
输入包含多组测试数据,每组只有一行,包括两个不大于 1000 的正整数。
*/
10 14
应当输出
/*
对于每个测试用例,给出这两个数的最小公倍数,每个实例输出一行。
*/
70
3. 素数判定
题目描述
给定一个数 n,要求判断其是否为素数(0,1,负数都是非素数)。
假如输入
/*
测试数据有多组,每组输入一个数 n。
*/
13
应当输出
/*
对于每组输入,若是素数则输出 yes,否则输入 no。
*/
yes
#include<stdio.h>
int issushu(int x){
if(x==1)
return 0;
for(int i=2;i<x;i++){
if(x%i==0)
return 0;
}
return 1;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
if(issushu(n))
printf("yes
");
else
printf("no
");
}
return 0;
}
4. 素数
题目描述
输入一个整数 n(2<=n<=10000),要求输出所有从 1 到这个整数之间(不包括
1 和这个整数)个位为 1 的素数,如果没有则输出-1。
假如输入
/*
输入有多组数据。
每组一行,输入 n。
*/
100
应当输出
/*
输出所有从 1 到这个整数之间(不包括 1 和这个整数)个位为 1 的素数(素数之
间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
*/
11 31 41 61 71
5. 质因数的个数
题目描述
求正整数 N(N>1)的质因数的个数。
相同的质因数需要重复计算。如 120=22235,共有 5 个质因数。
假如输入
/*
可能有多组测试数据,每组测试数据的输入是一个正整数 N,(1<N<10^9)。
*/
120
应当输出
/*
对于每组数据,输出 N 的质因数的个数。
提示:1 不是 N 的质因数;若 N 为质数,N 是 N 的质因数。
*/
5
6. 整除问题
题目描述
给定 n,a 求最大的 k,使 n!可以被 a^k 整除但不能被 a^(k+1)整除。
假如输入
/*
两个整数 n(2<=n<=1000),a(2<=a<=1000)
*/
6 10
应当输出
/*
一个整数.
*/
1
7. 进制转换
题目描述
将 M 进制的数 X 转换为 N 进制的数输出。
假如输入
/*
输入的第一行包括两个整数:M 和 N(2<=M,N<=36)。
下面的一行输入一个数 X,X 是 M 进制的数,现在要求你将 M 进制的数 X
转换成 N 进制的数输出。
*/
16 10
F
应当输出
/*
输出 X 的 N 进制表示的数。
提示:输入时字母部分为大写,输出时为小写。
*/
15
8. 百鸡问题
题目描述
用小于等于 n 元去买 100 只鸡,大鸡 5 元/只,小鸡 3 元/只,还有 1/3 元每只
的一种小鸡,分别记为 x 只,y 只,z 只。编程求解 x,y,z 所有可能解。
假如输入
/*
测试数据有多组,输入 n。
*/
40
应当输出
/*
对于每组输入,请输出 x,y,z 所有可行解,按照 x,y,z 依次增大的顺序输出。
*/
x=0,y=0,z=100
x=0,y=1,z=99
x=0,y=2,z=98
x=1,y=0,z=99
9. N 阶楼梯上楼问题
题目描述
N 阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。(要求
采用非递归)
假如输入
/*
输入包括一个整数 N,(1<=N<90)。
*/
4
应当输出
/*
可能有多组测试数据,对于每组数据,输出当楼梯阶数是 N 时的上楼方式
个数。
*/
5
10. 不容易系列之一
题目描述
HDU 有个网名叫做 8006 的男性同学,结交网友无数,最近该
同学玩起了浪漫,同时给 n 个网友每人写了一封信,这都没什么,要命的是,他
竟然把所有的信都装错了信封!注意了,是全部装错哟!现在的问题是:请大家
帮可怜的 8006 同学计算一下,一共有多少种可能的错误方式呢?
假如输入
/*
输入数据包含多个多个测试实例,每个测试实例占用一行,每行包含一个正
整数 n(1<n<=20),n 表示 8006 的网友的人数。
*/
2
3
应当输出
/*
对于每行输入请输出可能的错误方式的数量,每个实例的输出占用一行。
*/
1
2
11. 拦截导弹
题目描述
某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统。但是这种导弹拦
截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发
炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭,并观测到导
弹依次飞来的高度,请计算这套系统最多能拦截多少导弹。拦截来袭导弹时,必
须按来袭导弹袭击的时间顺序,不允许先拦截后面的导弹,再拦截前面的导弹。
假如输入
/*
每组输入有两行,
第一行,输入雷达捕捉到的敌国导弹的数量 k(k<=25),
第二行,输入 k 个正整数,表示 k 枚导弹的高度,按来袭导弹的袭击时间顺
序给出,以空格分隔。
*/
8
300 207 155 300 299 170 158 65
应当输出
/*
每组输出只有一行,包含一个整数,表示最多能拦截多少枚导弹。
*/
6
12. 寻找完数
题目描述
求1-n内的完数,所谓的完数是这样的数,它的所有因子相加等于它自身,比如6有3个因子1,2,3,1+2+3=6,那么6是完数。即完数是等于其所有因子(除了它自己)相加和的数。
假如输入
/*
测试数据有多组,输入n,n数据范围不大。
*/
6
应当输出
/*
对于每组输入,请输出1-n内所有的完数。如有案例输出有多个数字,用空格隔开,输出最后不要有多余的空格。
*/
6
#include<stdio.h>
int iswanshu(int x){
int sum=0;
for(int i=1;i<x;i++){
if(x%i==0)
sum+=i;
}
return sum==x;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;i++){
if(iswanshu(i))
printf("%d ",i);
}
}
return 0;
}
13. 判定一个数是否有一个不为1的完全平方数因子
题目描述
给定一个数n,判定它是否有一个不为1的完全平方数因子。也就是说,是否存在某个k,k>1,使得k*k能够整除n。
假如输入
/*
每行一个整数n,1<n<10000
*/
15
12
0
应当输出
/*
对于每一个输入的整数,在单独的一行输出结果,如果有不为1的完全平方数因子,则输出Yes,否则输出No。请注意大小写。
*/
No
Yes
#include<stdio.h>
int ishave(int n){
for(int i=1;i<n;i++){
if(i*i%n==0)
return 1;
}
return 0;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
if(ishave(n))
printf("Yes
");
else
printf("No
");
}
return 0;
}
14. 素数
题目描述
输入一个整数 n(2<=n<=10000),要求输出所有从 1 到这个整数之间(不包括
1 和这个整数)个位为 1 的素数,如果没有则输出-1。
假如输入
/*
输入有多组数据。
每组一行,输入 n。
*/
100
应当输出
/*
输出所有从 1 到这个整数之间(不包括 1 和这个整数)个位为 1 的素数(素数之
间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
*/
11 31 41 61 71
15. 位数之和
题目描述
对于给定的正整数 n,计算其十进制形式下所有位置数字之和,并计算其平方的各位数字之和。
假如输入
/*
每行输入数据包括一个正整数n(0<n<40000)
*/
4
12
97
39999
应当输出
/*
对于每个输入数据,计算其各位数字之和,以及其平方值的数字之和,输出在一行中,之间用一个空格分隔,但行末不要有空格。
*/
4 7
3 9
16 22
39 36
#include<stdio.h>
#include<algorithm>
using namespace std;
void calsum(int n){
int sum1=0;
int sum2=0;
int temp = n*n;
while(n!=0){
sum1+=n%10;
n = n/10;
}
while(temp!=0){
sum2+=temp%10;
temp = temp/10;
}
printf("%d %d
",sum1,sum2);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
calsum(n);
}
return 0;
}
16. 素数
题目描述
输入一个整数 n(2<=n<=10000),要求输出所有从 1 到这个整数之间(不包括
1 和这个整数)个位为 1 的素数,如果没有则输出-1。
假如输入
/*
输入有多组数据。
每组一行,输入 n。
*/
100
应当输出
/*
输出所有从 1 到这个整数之间(不包括 1 和这个整数)个位为 1 的素数(素数之
间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
*/
11 31 41 61 71
17. 素数
题目描述
输入一个整数 n(2<=n<=10000),要求输出所有从 1 到这个整数之间(不包括
1 和这个整数)个位为 1 的素数,如果没有则输出-1。
假如输入
/*
输入有多组数据。
每组一行,输入 n。
*/
100
应当输出
/*
输出所有从 1 到这个整数之间(不包括 1 和这个整数)个位为 1 的素数(素数之
间用空格隔开,最后一个素数后面没有空格),如果没有则输出-1。
*/
11 31 41 61 71