XDOJ 试题

选号程序

标题	
选号程序

类别	
流程控制

时间限制	
1S

内存限制	
256Kb

问题描述	
小明决定申请一个新的QQ号码,系统随机生成了若干个号码供他选择。小明的选号原则是:
1. 选择所有号码中各位数字之和最大的号码。
2. 如果有多个号码各位数字之和相同则选择数值最大的号码。
请你写一个程序帮助小明选择一个QQ号码。

输入说明	
输入数据由两行构成,第一行为一个整数n表示有n个待选号码(0<n<100),第二行有n个正整数,表示各个待选的号码,每个号码长度不超过9位数。每个号码之间用空格分隔,且每个号码都不相同。

输出说明	
输出根据小明的选号原则选出的号码。

输入样例	
5
10000 11111 22222 333 1234

输出样例	
22222
#include <stdio.h>
int main(){
	int n,i;
	int max = 0,sum = 0;
	scanf("%d",&n);
	int num[n];
	int t,m;
	for(i=0;i<n;i++){
		scanf("%d",&num[i]);
		m = num[i];
		while(m!=0){
			
			sum = sum+m%10;
			m = m/10;
		}
		if(sum>max){
		    max=sum;
			t=i;	
		}else if(sum==max){
			t = num[i]>num[t]?i:t;
		}
		sum = 0;
	}
	printf("%d",num[t]);
	return 0;
}

字符统计

标题
字符统计

描述
定义一个一维字符数组string[100],输入一个字符串,含N个字符(N≤100),定义一个整形数组num[5],用于存放统计结果数据,编写函数count()统计字符串中大写字母、小写字母、空格、数字以及其他字符的个数,使用指针完成地址传递,主函数完成数组输入和统计结果输出。
   
时间限制
1	

内存限制
10000	

类别
1

输入说明
输入一行字符串,100个以内。

输出说明
格式输出:输出大写字母、小写字母、空格、数字以及其他字符的个数信息,数据之间空一格。


输入样例
A 3cp &! 91 tD M

输出样例
3 3 5 3 2

提示
使用指针作形参,实现地址传递,输出数据之间空一格。

#include <stdio.h>
#include <string.h>
int main(){
	int high,low,space,num,other;
	high=low=space=num=other=0;
	char s[100];
	gets(s);
	for(int i=0;i<strlen(s);i++){
		if(s[i]>='A'&&s[i]<='Z'){
			high++;
		}else if(s[i]>='a'&&s[i]<='z'){
			low++;
		}else if(s[i]>='0'&&s[i]<='9'){
			num++;
		}else if(s[i]==' '){
			space++;
		}else other++;
	}
	printf("%d %d %d %d %d",high,low,space,num,other);
	return 0;
}

年月日统计

题目:年月日统计 
时间限制:1S
内存限制:10000Kb

问题描述:
定义一个结构体变量(包括年,月,日)。计算该日在本年中是第几天,(注意闰年问题)

输入说明:
输入三个数,分别表示年月日,数字之间用逗号隔开。
输出说明:
输出一个整数,表示该日期是本年中的第几天。
输入样例:
2019,1,30
输出样例:
30

#include <stdio.h>
int main(){
	int year,mon,day;
	scanf("%d,%d,%d",&year,&mon,&day);
	int n[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	if((year%4==0&&year%100!=0)||year%400==0){
		n[1]=29;
	}
	int sum = 0;
	for(int i=0;i<mon-1;i++){
		sum = sum+n[i];
	}
	sum+=day;
	printf("%d",sum);
	return 0;
}

成绩处理

标题
成绩处理

描述
输入5个学生,4门课成绩,二维数组stu[5][4]表示,行标表示学生,列标表示课程成绩,分别编写函数aver()fals()well()完成:(1)求第一门课的平均分;(2)统计有2门以上(2)课程不及格的同学人数;(3)平均成绩在90分以上(90)或者全部课程成绩在85分以上(85)的同学视为优秀,统计人数,使用指针完成地址传递,主函数完成数组输入和输出。
   
时间限制
1	

内存限制
10000	

类别
1

输入说明
输入二维浮点型数组stu[5][4]

输出说明
输出第一门课程平均分(保留1位小数)2门以上不及格人数和成绩优秀人数,数据之间空一格。

输入样例
85 73 59 92
93 95 89 88
86 88 88 87
59 51 52 68
78 32 59 91

输出样例
80.2 2 2

提示
注意行列信息。使用指针完成地址传递,主函数完成数组输入和输出。
#include <stdio.h>
double avera(double m);
int wel(double stu[5][4]);
int fals(double stu[5][4]);
int main(){
	double stu[5][4],sum = 0;
	double aver;
	int num1,num2;
	int i = 0,j = 0;
	for(i=0;i<5;i++){
		for(j=0;j<4;j++){
			scanf("%lf",&stu[i][j]);
		}
	}
	for(i=0;i<5;i++){
		sum = sum+stu[i][0];
	}
	aver = avera(sum);
	num1 = fals(stu);
   num2 = wel(stu);
    printf("%.1lf %d %d",aver,num1,num2);
	return 0;
} 
double avera(double m){
	double aver;
	aver = m/5;
	return aver;
}
int fals(double stu[5][4]){
	int i = 0,j = 0;
	int count = 0,num = 0;
	for(i = 0;i<5;i++){
		count = 0;
		for(j=0;j<4;j++){
			if(stu[i][j]<60){
				count++;
			}
		}
		if(count>=2){
			num++;
		}
	}
	return num;
}
int wel(double stu[5][4]){
	int i = 0,j = 0,w=0,p = 0;
	double sum = 0;
	for(i=0;i<5;i++){
			sum = 0;
			p=0;
		for(j=0;j<4;j++){                                 
				sum = sum+stu[i][j];
			if(stu[i][j]>=85){
				p++;
			}
		}
		if(sum>=360||p==4){
			w++;
		}
	}
	return w;
} 

判断字符是否回文

试题名称	判断字符串是否是回文
时间限制:	1 秒
内存限制:	256KB

问题描述
给定一个字符串,判断该字符串是否是回文,并在屏幕上输出判断结果。如“abcba”即是回文。

输入说明
从键盘输入一个字符串,该字符串中字符可以是字母、数字和空格,字母区分大小写。字符串总长不超过50个字符。

输出说明
若该字符串是回文,则输出yes,否则输出no。

输入样例
输入样例1 
abcba
输入样例2 
Abccba

输出样例
输出样例1 
yes
输出样例2 
no

#include <stdio.h>
#include <string.h>
int main(){
	int i = 0,j = 0;
	char s[100];
	gets(s);
	int l = strlen(s);
	for(i=0,j=l-1;i<l/2;i++,j--){
		if(s[i]!=s[j]){
			break;
		}
	}
	if(i>=l/2){
		printf("yes");
	}else printf("no");
	return 0;
}

字符串部分复制

试题名称	字符串部分复制
时间限制:	1 秒
内存限制:	256KB

问题描述
给定一个的字符串,从第m个字符开始复制成为另一个字符串。编写函数copystr( )完成字符串复制,使用字符类型的指针变量作为形参,主函数完成字符串输入和m值的输入,函数调用,以及最后结果的输出。

输入说明
第一行从键盘输入一个字符串,该字符串中字符可以是字母、数字、空格和其它字符。字符串总长不超过50个字符。
第二行输入整数m的值。

输出说明
若该字符串长度小于m,则输出error,否则输出从该字符串第m个字符复制的字符串。

输入样例
输入样例1 
Abc ba/!.123
3
输入样例2 
abced
6

输出样例
输出样例1 
c ba/!.123
输出样例2 
error

#include <stdio.h>
#include <string.h>
void copy(char s[],int m);
int main(){
	char s[100];
    gets(s);
		int m;
	scanf("%d",&m);
	copy(s,m);
	return 0;
}
void copy(char s[],int m){
	if(m>strlen(s)){
		printf("error");
	}else if(m<= strlen(s)){
		for(int i=m-1;s[i]!='\0';i++){
			printf("%c",s[i]);
		}
	}
}

自然数求和

标题
自然数求和

描述
输入自然数N(N<65536),采用直到型循环结构,对不大于N的所有自然数求和,并输出。

时间限制
1	

内存限制
10000	

类别
1

输入说明
输入自然数N,如15	

输出说明
输出不大于N的所有自然数之和	

输入样例
15

输出样例
120

提示
采用while循环结构,不大于N的自然数之和

#include <stdio.h>
int main(){
	int n,i=0;
	scanf("%d",&n);
	int sum = 0;
	while(i<=n){
		sum+=i;
		i++;
	} 
	printf("%d",sum);
	return 0;
}

分解质因数

分解质因数

题目描述:
每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,
这几个素数就都叫做这个合数的质因数。编写程序将一个正整数分解质因数

输入描述:
输入一个正整数n(2<n<1000)

输出描述:
形如a*b*b*c,质因数按照从小到大的顺序排列

输入样例:
90

输出样例:
2*3*3*5`

#include <stdio.h>
#include <math.h>
int is_prime(int n);
int main(){
	int n,i = 2;
	int ret = 0,flag;
	scanf("%d",&n);
	 while(i<=sqrt(n)){
	 	while(n%i!=0){
	 		i++;
		 }
		 if(n%i==0){
	 		printf("%d",i);}
	 		
	 	      ret=is_prime(n/i);
			   if(i<n){	
			   printf("*");
			 }
			   if(ret == 1){
	 	      	printf("%d",n/i);
	 	      	break;
			   }else n=n/i;
			   }
	 
	return 0;
}
int is_prime(int n){
	int i = 2;
	int flag = 0;
    while(i<n){
    	if(n%i==0){
    		flag = 0;
    		break;
		}
		else i++;
	}
	if(i == n){
		flag = 1;
	}
	return flag;
}

和差平方与平方和差

试题名称 problem1-6 和差平方与平方和差
时间限制: 1 秒
问题描述 
输入两个大于 4 的正整数 a 和 b,分别计算(a+b)2(a-b)2、a2+b2,、a2-b2,并找出其最大值
和最小值。
输入说明 
输入为 2 个正整数 a 和b,4<= a, b <1000,整数之间由空格分开
输出说明 
输出两个整数,分别表示(a+b)2(a-b)2、a2+b2,、a2-b2 中的最大值和最小值,整数之间用
空格分隔。
测试样例: 
输入样例 1
8 10
输出样例 1
324 -36
输入样例 2
36 5
输出样例 2
1681 961
#include <stdio.h>
int main(){
	int a,b;
	scanf("%d %d",&a,&b);
	int s1,s2,s3,s4;
	s1 = (a+b)*(a+b);
	s2 = (a-b)*(a-b);
	s3 = a*a-b*b;
	s4 = a*a+b*b;
	int n[4]={s1,s2,s3,s4};
	for(int i=0;i<3;i++){
		for(int j=i+1;j<4;j++){
			if(n[i]>n[j]){
				int t;
				t=n[i];
				n[i]=n[j];
				n[j]=t;
							} 
		}
	}
		printf("%d %d",n[3],n[0]);
	return 0;
}

数字个数统计1

标题
数字个数统计

描述
统计区间为[100,500)内,能被711整除,但不能被711同时整除的整数个数。
时间限制
1	

内存限制
10000	

类别
1

输入说明
无	

输出说明
输出个数统计结果

输入样例
无

输出样例
83

提示
采用for循环结构
#include <stdio.h>
int main(){
	int i=100;
	int count = 0;
	for(i=100;i<500;i++){
		if((i%7==0||i%11==0)&&(i%77!=0)){
			count++;
		} 
	}
	printf("%d",count);
	return 0;
}

数字个数统计2

标题
数字个数统计2

描述
输入一个正整数N(300≤N≤500),统计N(1~N)以内奇数、偶数和能分别被357整除的数字个数。

时间限制
1	

内存限制
10000	

类别
1

输入说明
输入正整数N(300≤N≤500),如452

输出说明
输出N以内奇数、偶数和能分别被357整除的数字个数

输入样例
452

输出样例
226 226 150 90 64

提示
编制子函数单数Odd()、双数Even()Sum_3()Sum_5()Sum_7()分别实现数字统计和输出,无返回值,各输出之间空一个空格;
主函数调用
#include <stdio.h>
int Odd(int i){
	int flag = 0;
	if(i%2 == 1){
		flag = 1;
	}
	return flag;
}
int Even(int i){
	 int flag = 0;
	if(i%2 == 0){
		flag = 1;
	}
	return flag;
}
	int	Sum_3(int i){	
		int flag = 0;
	if(i%3 == 0){
		flag = 1;
	}	return flag;
	}
	int	Sum_5(int i){
		int		flag = 0;
	if(i%5 == 0){
		flag = 1;
	}	return flag;
	}
	int	Sum_7(int i){
		int		flag = 0;
	if(i%7 == 0){
		flag = 1;
	}	return flag;
	}
int main(){
	int n;
	int c1,c2,c3,c4,c5;
	c1=c2=c3=c4=c5=0;
	scanf("%d",&n);
	for(int i = 1;i<=n;i++){
	if	(Odd(i) == 1){
		c1++;
	}
	if(	Even(i) == 1){
		c2++;
	}
	if(	Sum_3(i)==1){
		c3++;
	}
	if(	Sum_5(i)==1){
		c4++;
	}
if	(Sum_7(i)==1){
	c5++;
}
	}
	printf("%d %d %d %d %d",c1,c2,c3,c4,c5);
}

迭代法求根

题目:迭代法求根(1)
时间限制:1S
内存限制:10000Kb
问题描述:
用迭代法求,求平方根的迭代公式为

要求前后两次求出的x的差的绝对值小于。
输入说明:
输入浮点数a。
输出说明:
输出一个浮点数x,小数点后保留5位小数。
输入样例:
3
输出样例:
1.73205

#include <stdio.h>
#include <math.h>
int main(){
	double a;
	scanf("%lf",&a);
	double x1,x2;
	if(a==0){
		printf("%.5lf",a);
	}else{
     x1=a/2;
     x2=(x1+a/x1)/2;
	 do{
		x1 = x2;
		x2 = (x1+a/x1)/2;
	} while(fabs(x1 - x2)>=1e-5);
	printf("%.5lf",x2);}
return 0;
} 

小球下落问题

题目:小球下落问题
时间限制:1S
内存限制:10000Kb
问题描述:
一个球从100m的高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第n次落地时,共经过多少米,第n次反弹多高。注:
输入说明:
输入一个整数,表示第n次落地反弹。
输出说明:
输出两个浮点数,表示小球经过的距离,和第n次反弹的高度,小数点后保留3位小数。
输入样例:
10
输出样例:
S=299.609 h=0.098

#include <stdio.h>
#include <math.h>
int main(){
	int n;
	scanf("%d",&n);
	double s = 100,h,N;
	N = s;
	h = 100/pow(2,n);
	for(int i=2;i<=n;i++){
		s+=2*N/pow(2,i-1);
	} 
	
	printf("S=%.3lf h=%.3lf",s,h);
	return 0;
}

分宝物

海盗分宝物。两个寻宝者找到一个宝藏,里面包含5件物品,每件物品的价值分别是
w[n], w[n + 1], · · · , w[n + 4]。sA代表寻宝者A所获物品价值总和,sB代表寻
宝者B所获物品价值总和,请问怎么分配才能使得两人所获物品价值总和
差距最小,即两人所获物品价值总和之差的绝对值|sA − sB|最小。其中,w[n]数值为
第n个质数,第一个质数为2,第二个质数为3,第三个为5,n的数值由键盘输入,0 < n < 20。
输入示例1:
1
输出示例1:
0
提示,n=1,宝藏价值分别为2, 3, 5, 7, 11,二者之差绝对值,最小可以为0,所以输出为0。

输入示例2:
2
输出示例2:
1


#include <stdio.h>
#include <math.h>
int is_prime(int n); 
int main(){
	int num[30],i,j;
	for( i=2,j=0;i<30;i++){
		if(is_prime(i)==1){
			num[j]=i;
			j++;
		}
	}
	int sum = 0,min=100,n;
	scanf("%d",&n);
	for(i=n-1;i<n+4;i++){
		sum = sum+num[i];
	} 
   for(i=n-1;i<n+3;i++){
   	for(j=i+1;j<n+4;j++){
   		int s=0;
   		s=sum-2*(num[i]+num[j]);
   		if(fabs(s)<min){
   			min = fabs(s);
		   }
	   }
   }
   printf("%d",min);
	return 0;
}
int is_prime(int n){
	int i;
	for(i=2;i<n;i++){
		if(n%i==0)
		break;
	}

 int flag = 0;
 if(n==i) flag=1;
 return flag;}

阶乘运算

标题
阶乘运算

描述
编写P(m,n)=m!/n!/(m-n)!(m>n)。求出P(m,n)的值。

时间限制
1	

内存限制
10000	

类别
1

输入说明
输入两个整数(m>n),如8 6	

输出说明
输出保留2位小数	

输入样例
8 6

输出样例
28.00

提示
采用for循环结构,数据类型为单精度浮点型,输出保留两位小数,格式%.2f
#include <stdio.h>
float fac(int m);
int main(){
	int m,n;
	scanf("%d %d",&m,&n);
	printf("%.2f",fac(m)/fac(n)/fac(m-n));
	
	return 0;
}
float fac(int m){
	float i=0,sum = 1;
	for(i=1;i<=m;i++){
		sum=sum*i;
	}
	return sum;
}

字符逆序排放

题目:字符逆序排放 
时间限制:1S
内存限制:10000Kb
问题描述:

写一个函数,使输入的字符按照反序排放,在主函数中输入和输出字符。
输入说明:
输入一个字符串。
输出说明:
输出上述字符串的逆序排列。
输入样例:
animal
输出样例:
lamina
#include <stdio.h>
#include <string.h>
int main(){
	char s[100];
	gets(s);
	int l = strlen(s);
	for(int i=l-1;i>=0;i--){
		printf("%c",s[i]);
	}
	return 0; 
} 

Fibonacci数列

标题	
Fibonacci数列

类别	
函数与递归

时间限制	
2S

内存限制	
1000Kb

问题描述	
有一种形式的Fibonacci数列定义如下:
F(0)=7 
F(1)=11
F(n)=F(n-1)+F(n-2)(n>=2)

按以下声明写一个函数fib
int fib(int n);
fib函数用来计算参数n对应的F(n)fib(n)的返回值是F(n)

输入说明	
函数参数为一个整数n(0<=n<40)。

输出说明	
函数返回值为整数,表示n对应的F(n)值。

输入样例	
2

输出样例	
18

#include <stdio.h>
int fib(int n){
	int flag = 0;
	if(n==0){
		flag = 7;
	}else if(n==1){
		flag = 11;
	}else flag = fib(n-1)+fib(n-2);
	return flag;
}
int main(){
	int n;
	scanf("%d",&n);
	printf("%d",fib(n));
	return 0;
}

数列求和

标题	
数列求和

类别
函数与递归

时间限制	
1S

内存限制	
1000Kb

问题描述	
有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13,......An/Bn
A1=2,A2=3,An=An-1+An-2;
B1=1,B2=2,Bn=Bn-1+Bn-2。
求出这个数列的前n(2<=n<=30)项之和。

输入说明	
一个整数n

输出说明	
输出一个实数表示数列前n项之和,结果保留2位小数(四舍五入)

输入样例	
2
输出样例	
3.50
#include <stdio.h>
float fac(int m);
int main(){
	int m,n;
	scanf("%d %d",&m,&n);
	printf("%.2f",fac(m)/fac(n)/fac(m-n));
	
	return 0;
}
float fac(int m){
	float i=0,sum = 1;
	for(i=1;i<=m;i++){
		sum=sum*i;
	}
	return sum;
}

字符串筛选

2.编写函数fun,其功能是将字符串s下标为奇数的字符删除,字符串中剩余字符形成的新字符串放在数组t中。
主函数中输入字符串s,调用函数,输出字符数组t。

输入说明:共一行,输入字符串s

输出说明:共一行,输出字符串t

输入示例:abcd1234

输出示例:ac13
#include <stdio.h>
#include <string.h>
void fun(char s[100]);
int main(){
	char s[100];
	gets(s);
	fun(s);
	return 0;
}
void fun(char s[100]){
	int i,j;
	char t[100];
	for(i=0,j=0;i<strlen(s);i++){
		if(i%2==0){
			t[j]=s[i];
			j++;		}
}
    for(j=0;j<strlen(t);j++){
    	printf("%c",t[j]);
	}}

斐波那契数列素数判断

标题	
斐波纳契数列

类别
函数与递归
	
时间限制	
2S

内存限制	
256Kb

问题描述	
已知一个斐波纳契数列中的数字依次为1, 1, 2, 3, 5, 8, 13, 21, 34, 55 … 。请判断该数列中第n个数字(n从1开始计数)是不是素数。

输入说明	
输入一个整数n(1<n<=40)。

输出说明	
判断斐波纳契数列中的第n个数字是不是素数,如果是输出yes,否则输出该数字。

输入样例
样例1输入	
6
样例2输入
4

输出样例	
样例1输出
8
样例2输出
yes

#include <stdio.h>
int fib(int n){
	int f;
	if(n==1){
		f = 1;
	}else if(n==2){
		f = 1;
	}else f = fib(n-1)+fib(n-2);
	return  f;
}
int is_prime(int f){
	int i = 0,flag = 0;
	for(i=2;i<=f;i++){
		if(f%i==0){
			break;
		}
	}
   if(f==i){
   	flag = 1;
   }
  return flag;
} 
int main(){
	int n,f;
	scanf("%d",&n);
	f = fib(n);
	if(is_prime(f)==1){
		printf("yes");
	}else printf("%d",f);
	return 0;
}

哥德巴赫猜想

标题	
歌德巴赫猜想

类别	
函数与递归

时间限制	
2S

内存限制	
10000Kb

问题描述
德巴赫猜想:
任意一个大偶数都能分解为两个素数的和,
对与输入的一个正偶数,写一个程序来验证歌德巴赫猜想。
由于每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,按从小到大顺序输出。

输入说明	
输入一个正偶数n,1<n<1000。

输出说明	
输出分解出的两个最小和最大素数。

输入样例	
10

输出样例	
3 7
#include <stdio.h>
int is_prime(int f){
	int i = 0,flag = 0;
	for(i=2;i<=f;i++){
		if(f%i==0){
			break;
		}
	}
	if(f==i){
		flag = 1;
	}
	return flag;
} 
int main(){
   int n;
   scanf("%d",&n);
   int i = 2;
   for(i=2;i<n;i++){
   	if(is_prime(i)==1&&is_prime(n-i)==1){
   		printf("%d %d",i,n-i);
   		break;
	   }
   }	
	return 0;
} 

水仙花数

题目:	
水仙花数

类别
流程控制

时间限制	
2S

内存限制	
10000Kb

问题描述	
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。
(例如:1^3 + 5^3 + 3^3 = 153)。
定义一个函数int function(int a, int b),计算区间[a,b]或区间[b,a]上水仙花数的个数。

输入说明	
输入由两个整数a和b构成,a和b之间用空格分隔。0<a,b<10000

输出说明	
输出区间[a,b]或区间[b,a]上水仙花数的个数。

输入样例	
3  1000  

输出样例	
4

提示	
a,b的位数n可能小于3

递归数列

标题:
递归数列

类别
函数与递归

程序类型:
代码片段

时间限制:
2S
内存限制	
10000Kb

问题描述	
一个数列A定义如下
A(1)=1A(2)=1/(1+A(1))A(3)=1/(1+A(2)),
……
A(n)=1/(1+A(n-1))。
定义一个函数function用来计算数列的第第n项的值,函数声明如下:
double function(int n);

输入说明:	
输入为1个正整数n,n<=10。

输出说明	
函数输出数列A第n项的值,结果小数点后保留6位有效数字,多余部分四舍五入。

输入样例	
5

输出样例	
0.625000

提示	
所有浮点数使用双精度浮点来运算!!!
#include <stdio.h>
double function(int n){
	double a;
	if(n==1){
		a = 1;
	}else {
		a = 1/(1+function(n-1));
	}
	return a;
}
int main(){
	int n;
	scanf("%d",&n);
	printf("%.6lf",function(n));
}

位数判断

problem 3-6. 位数判断
题目描述:
输入一个不大于 9 位数的非负整数 m,判断 m 是几位数?
输入说明:
输入为一个整数 m,范围 0<=m<=999999999
输出说明:
输出一个整数,表示整数 m 的位数
输入样例:
3456
输出样例:
4
#include <stdio.h>
int main(){
	int n,num=0;
	scanf("%d",&n);
	if(n==0){
		num=1;
	} 
	while(n!=0){
		n = n/10;
		num++;
	}
	printf("%d",num);
	return 0;
}

亲和数

problem 4-6 亲和数
时间限制:1S

题目描述:
古希腊数学家毕达哥拉斯在自然数研究中发现,220 的所有真约数(即不是自身的约数)之和为:
1+2+4+5+10+11+20+22+44+55+110=284284 的所有真约数为 1122447171142142,加起来恰好为 220。人们对这样的数感到很惊奇,并称之为亲和数。
一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。

你的任务就编写一个程序,判断给出的两个整数m和n是不是亲和数(m和n可以相同)。

输入说明
输入为两个整数n和m,(1<n,m≤10000),n和m之间用空格分隔

输出说明
在同一行上输出为三项,用空格分隔。
第一项表示判断结果,如果两个数是亲和数输出yes,否则输出no;
第二项是一个整数,表示n的真约数个数;
第三项是一个整数,表示m的真约数个数。

测试样例
输入样例1220 284
输出样例1:
yes 11 5

输入样例24 3
输出样例2:
no 2 1
#include <stdio.h>
int main(){
	int m,n,c1 = 0,c2 = 0;
	int s1 = 0,s2 = 0;
	scanf("%d %d",&m,&n);
	int i;
	if(m==0){
		c1=1;
	}else{
	for(i=1;i<m;i++){
		if(m%i==0){
		s1+=i;
		c1++;
		}
	}}
	if(n==0){
		c2=1;
	}else {
	for(i=1;i<n;i++){
		if(n%i==0){
			s2+=i;
			c2++;}
	}}
	if(s1==n&&s2==m){
		printf("yes ");
	}else printf("no ");
	printf("%d %d",c1,c2);
	return 0;
}

质数求和

problem 4-6 质数求和

时间限制:1S

问题描述	
输入一个大于20的正整数p,求出正整数范围内第p个质数(或素数,大于1且只能被1和自己整除的正整数,)到第p+10个质数之和。其中,第1个质数为2,第2个质数为3,第3个质数为5,第4个质数为7,依次类推。

输入说明	
一行输入1个整数p,20< p <150。

输出说明	
第p个质数到第p+10个质数之和。


输入样例:
21
输出样例:
1081

#include <stdio.h>
int is_prime(int n){
	int i;
    for(i=2;i<=n;i++){
    	if(n%i==0){
    		break;
		}
	}
	int flag  = 0;
	if(n==i) flag = 1;
	return flag;
}
int main(){
	int i = 0,j,num[200];;
	int p,sum = 0;
	scanf("%d",&p);
		for(i = 2,j=0;j<200;i++){
		if(is_prime(i)==1){
			num[j]=i;
			j++;
		}
	}

	for(i=p-1;i<=p+9;i++){
		sum = sum+num[i];
	}
	printf("%d",sum);
	return 0;
} 

码字不易,给个👍~我们下一篇博客见!

才疏学浅,个人理解难免有错,欢迎指正。

  • 9
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值