/* 本文是本人在学习《算法竞赛入门经典》时所做的笔记,插补阙漏, 有错误之处望指出,谢谢。*/
1.5.3 习题
1-1 平均数
#include<stdio.h>
int main()
{int a,b,c;
float v;
scanf("%d %d %d",&a,&b,&c);
v = (a+b+c)/3;
printf("%.3f\n",v);
return 0;
}
注: 不要忘记在scanf中要使用&符号获取数字或者字符。
1-2 温度
#include<stdio.h>
int main()
{
float f, c;
printf("输入华氏温度:");
scanf("%f",&f);
c = 5.0 * (f-32.0) / 9.0 ;
printf("%.3f",c);
return 0;
}
1-3 连续和
#include<stdio.h>
int main()
{
int n,sum;
scanf("%d",&n);
sum = n * (1 + n) / 2; /*列出求和公式*/
printf("sum = %d\n",sum);
return 0;
}
1-4 正弦和余弦
#include<stdio.h>
#include<math.h>
#define PI acos(-1.0)
int main()
{
int n;
double m,y1,y2;
printf("输入度数:");
scanf("%d",&n);
m = (n*PI)/180;
y1 = sin(m);
y2 = cos(m);
printf("sin(%d°) = %lf\n",n,y1);
printf("cos(%d°) = %lf\n",n,y2);
return 0;
}
#include<math.h>
#define PI acos(-1.0)
int main()
{
int n;
double m,y1,y2;
printf("输入度数:");
scanf("%d",&n);
m = (n*PI)/180;
y1 = sin(m);
y2 = cos(m);
printf("sin(%d°) = %lf\n",n,y1);
printf("cos(%d°) = %lf\n",n,y2);
return 0;
}
1-5 打折
#include<stdio.h>
int main(){
int n, m;
float p;
m = 95;
scanf("%d",&n);
p = n * m;
if(p>=300)
{
printf("%.2f\n",0.85*p);
}
else
printf("%.2f\n",p);
}
1-6 三角形边
#include<stdio.h>
int main()
{
int a, b, c;
scanf("%d %d %d",&a, &b, &c);
if(a*a == b*b + c*c)
printf("Yes!");
else if(b*b == a*a + c*c)
printf("Yes!");
else if(c*c == a*a + b*b)
printf("Yes!");
else
printf("Not a triangle!");
}
int main()
{
int a, b, c;
scanf("%d %d %d",&a, &b, &c);
if(a*a == b*b + c*c)
printf("Yes!");
else if(b*b == a*a + c*c)
printf("Yes!");
else if(c*c == a*a + b*b)
printf("Yes!");
else
printf("Not a triangle!");
}
1-7 闰年
#include<stdio.h>
int main()
{
int year;
scanf("%d",&year);
if(year%4==0 && year%100!=0 || year%400==0)
printf("是闰年");
else
printf("不是闰年");
}
int main()
{
int year;
scanf("%d",&year);
if(year%4==0 && year%100!=0 || year%400==0)
printf("是闰年");
else
printf("不是闰年");
}
问题4:逻辑&&的优先级高于||,!(逻辑非)高于&&。
2.1 习题
2-2 7744问题
#include<stdio.h>
#include<math.h>
int main()
{
for(int n=1;n<10;n++)
for(int m=1;m<10;m++)
{
int num = n * 1100 + m * 11;
int ber = floor(sqrt(num)+0.5); /*floor(x)返回不超过x的最大整数*/
if(ber * ber == num)
printf("%d\n",num);
}
return 0;
}
#include<math.h>
int main()
{
for(int n=1;n<10;n++)
for(int m=1;m<10;m++)
{
int num = n * 1100 + m * 11;
int ber = floor(sqrt(num)+0.5); /*floor(x)返回不超过x的最大整数*/
if(ber * ber == num)
printf("%d\n",num);
}
return 0;
}