程序2-1
7744问题:完全平方数
(1)
#include<stdio.h>
#include<math.h>
int main()
{
for(int a = 1; a <= 9; a++)
for(int b = 0; b <= 9; b++){
int n=a*1100+b*11;
int m=floor(sqrt(n)+0.5);
//floor(3.14) = 3.0 floor(9.999999) = 9.0 floor(-3.14) = -4.0 floor(-9.999999) = -10
//floor(x),也写做Floor(x),其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整是直接取按照数轴上最接近要求值的左边值,即不大于要求值的最大的那个值)。
if(m*m==n)
printf("%d\n",n);
}
return 0;
}
(2)
#include<stdio.h>
#include<math.h>
int main()
{
for(int x=1;;x++){
int n=x*x;
if(n<1000) continue;
if(n>9999) break;
int hi=n/100;
int lo=n%100;
if(hi/10==hi%10&&lo/10==lo%10)
printf("%d\n",n);
}
}
先判断n的数值在(1000,10000)之间,分别取出高两位hi,地两位lo,然后再判断hi和ho中两位数字是否相等。
2-2
whlie循环
#include<stdio.h>
int main()
{
int n2, count = 0;
scanf("%d", &n2);
long long n = n2;
while(n > 1)
{
if(n % 2 == 1) n = n*3+1;
else n /= 2;
count++;
}
printf("%d\n", count);
return 0;
}
do-while循环
“do{循环体}while(条件);”
计算pi/4=1-1/3+1/5-1/7+...,直到最后一项小于10-6
#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+=term;
else
sum-=term;
if(term<1e-6)
break;
}
printf("%.6f\n",sum);
return 0;
}
#include<stdio.h>
int main(){
double sum=0;
int i=0;
double term;
do
{
term=1.0/(i*2+1);
if(i%2==0) sum+=term;
else
sum-=term;
i++;
} while(term >1e-6);
printf("%.6f\n",sum);
return 0;
}
循环
#include<stdio.h>
int main()
{ /*输入n,计算S=1!+2!+3!+…+n!的末6位(不含前导0)。n≤106,n!表示
前n个正整数之积。
样例输入:
10
样例输出:
37913*/
int n, S = 0;
scanf("%d", &n);
for(int i = 1; i <= n; i++)
{
int factorial = 1;
for(int j = 1; j <= i; j++)
factorial *= j;
S += factorial;
}
printf("%d\n", S );
printf("%d\n", S % 1000000);
return 0;
}
#include<stdio.h>
#define INF 100000000
int main()
{
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;
}
/*scanf的输入格式吗?空格、TAB和回车符都是无关紧要的,
所以按Enter键并不意味着输入的结束。那如何才能告诉程序输入结束了呢?
提示2-19:在Windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再按Enter
键,即可结束输入。在Linux下,输入完毕后按Ctrl+D键即可结束输入。*/
#include<stdio.h>
#define INF 100000000
int main()
{
FILE *fin,*fout;
fin=fopen("data.in","rd");
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;
}
#include<stdio.h>
#define INF 1000000000
int main()
{
int x, n = 0, kase = 0;
while(scanf("%d", &n) == 1 && n) //&&n 判断如何n为0时,程序结束。
{
int s = 0,
min = INF, max = -INF;
for(int i = 0; i < n; i++) { //输入n个数据
scanf("%d", &x);
s += x;
if(x < min) min = x;
if(x > max) max = x;
}
if(kase) printf("\n");
printf("Case %d: %d %d %.3f\n", ++kase, min, max, (double)s/n);
}
return 0;
}