目录

一、aabb问题

二、7744问题

三、3n + 1 问题

四、近似计算

五、阶乘之和

六、数据统计


一、aabb问题

问题描述:输出所以形式为没有 aabb 的完全平方数(例如1122,3344),bb可以为00,aa则不行,又aabb知,这是个四位数,由穷举就可以把每个符合条件的列出来

没有输入:

样例输出:

1100

1111

1122

*****

 

源代码:

#include<stdio.h>
int main()
{
	int a,b;
	for(a=1;a<=9;a++)
		for(b=0;b<=9;b++)
		{
			printf("%d\n",a*1100+b*11);
		}
	return 0; 
 } 

 

二、7744问题

问题描述:输入一个整数,判断其是否为完全平方数(用一个int 形变量m存储sqrt(n)四舍五入后的整数,然后判断m^2是否等于n,函数floor(x)返回不超过x的最大整数)

样例输出:

7744

 

源代码:

#include<stdio.h>
#include<math.h>
int main()
{
	int a,b;
	for(a=1;a<=9;a++)
		for(b=0;b<=9;b++)
		{
			int n = a*1100+b*11;
			int m = floor(sqrt(n) + 0.5);
			if(m*m == n)	
			printf("%d\n",n);
		}
	return 0; 
 } 

 

三、3n + 1 问题

问题描述:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半,经过若干次这样的变换,一定会使n变为1,例如3—>10—>5—>16—>8—>4—>2—>1,可能输入的n非常的大,有时候要把n改为long long型

输入n,输出变换的次数

样例输入:

3

样例输出:

7

 

源代码:

#include<stdio.h>
int main()
{
	int n,count = 0;
	scanf("%d",&n);
	while(n != 1)
	{
		if(n%2 == 1)
		n=3*n +1;
		else
		n=n/2;
		count++;
	}
	printf("%d",count);
	return 0; 
 } 

 

四、近似计算

问题描述:算法竞赛(二)_近似计算问题,直到最后一项小于算法竞赛(二)_近似计算问题_02

 样例输出:

0.785399

 

源代码:

#include<stdio.h>
int main()
{
	double sum =0;
	for(int i = 0;;i++)
	{
		double term = 1.0/(i*2+1);
		if(i%2 == 0)
		sum =sum + term;
		else sum = sum - term;
		if(term<1e-6)//e代表底数10 -6代表负六次方
		break;
	}
	printf("%.6f\n",sum);
	return 0; 
 } 

 

五、阶乘之和

问题描述:输入n,计算1!+2!+3!+4! * * * n!的末六位(不含前导0,只保留后六位数字)。n<=10^6,

样例输入:

10

样例输出:

 37913

 

源代码:

#include<stdio.h>
int main()
{
	int n,S;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int f=1;//每次循环都要初始化变量
		for(int j=1;j<=i;j++)
		f*=j;
		S+=f;
	}
	printf("%d\n",S%1000000);
	return 0; 
 } 

 

六、数据统计

问题描述:输入一些整数,求出他们最大值,最小值,平均值(保留三位小数),输入保证这些数都是不超过1000的整数

样例输入

1 2 3

样例输出

1 3 2.000 

 

 

源代码:

#include<stdio.h>
int main()
{
	int x,n=0,min,max,s=0;
	while(scanf("%d",&x)==1)
	{
		s+=x;
		if(x<min)min =x;
		if(x>max)max =x;
		n++;
	}	
	printf("%d %d %.3f",min,max,s*1.0/n);
	return 0;
}

PS:有时候,按下回车键,不一定意味着输入结束,在windows环境下,我们输入完成后,还要按下 ctrl + z,这个时候代表输入结束,Linux环境下,按下ctrl + D 可代表输入结束

 

数据统计(重定向版)

//重定向法
#define LOCAL
#include<stdio.h>
#define INF 1000000000
int main()
{
#ifdef INF LOCAL
	freopen("data.in","r",stdin);
	freopen("data.out","w",stdout);
#endif
	int x,n = 0,min =INF,max = -INF,s = 0;
	while(scanf("%d",&x) == 1)
	{
		s += x;
		if(x<min) min = x;
		if(x>max) max = x;
		n++;
	 } 
	 printf("%d %d %.3f\n",min,max,(double)s/n);
	 return 0;
}

数据统计(fopen版)

#include<stdio.h>
#define INF 1000000000
int main()
{
	FILE *fin, *fout;
	fin = fopen("data.in","rb");
	fout = fopen("data.out","wb");
	int x,n = 0,min = INF,max = -INF,s = 0;
	while(fscanf(fin,"%d",&x)==1)
	{
		s +=x;
		if(x<min) min = x;
		if(x>max) max = x;
		n++;
	}
	fprintf(fout,"%d %d %.3f\n",min,max, (double)s/n);
	fclose(fin);
	fclose(fout);
	return 0;
}