目录
例题1-1 输入底面半径r和高h,输出圆柱体的表面积,保留3位小数
例题1-2 输入一个三位数,分离出它的百位、十位和个位,反转后输出。 样例输入: 127 样例输出: 721。
例题1-3 输入两个整数a和b,交换二者的值,然后输出。 样例输入: 824 16 样例输出: 16 824
例题1-4 已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目。如 果无解,则输出No answer。
例题1-5 输入3个整数,从小到大排序后输出。 样例输入: 20 7 33 样例输出: 7 20 33
习题二:输入华氏温度f,输出对应的摄氏温度c,保留3位小数。提示:c=5(f-32)/9。
例题三:输入正整数n,输出1+2+…+n的值。提示:目标是解决问题,而不是练习编程。
例题四:输入正整数n(n<360),输出n度的正弦、余弦函数值。提示:使用数学函数。
例题五:一件衣服95元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金 额(单位:元),保留两位小数。
例题六:输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的3个边长。如果 可以,则输出yes,如果不能,则输出no。如果根本无法构成三角形,则输出not a triangle。
例题七:输入年份,判断是否为闰年。如果是,则输出yes,否则输出no 。
算法竞赛的程序应当只做3件事情:读入数据、计算结果、打印输出。不要打印提示信息,不要在打印输出后“暂停程序”,更不要尝试画图、访问网络等与算法无关的任务。
复习:整数值用%d输出,实数用%f输出;整数/整数=整数,浮点数/浮点数=浮点数。
赋值是个动作,先计算右边的值,再赋给左边的变量,覆盖它原来的值。
例题1-1 输入底面半径r和高h,输出圆柱体的表面积,保留3位小数
提示:1.在算法竞赛中,输入前不要打印提示信息。输出完毕后应立即终止程序,不要等待用户按键,因为输入输出过程都是自动的,没有人工干预。
2.在算法竞赛中不要使用头文件conio.h,包括getch()、clrscr()等函数。
3.注意输出格式,输出格式是非常严格的,多一个或 者少一个字符都是不可以的。在算法竞赛中,每行输出均应以回车符结束,包括最后一行。除非特别说明,每行的行首不应有空格,但行末通常可以有多余空格。另外,输出的每两个数或者字符 串之间应以单个空格隔开。
4.尽量用const关键字声明常数,const关键字表明它的值是不可以改变的。
#include<stdio.h>
#include<math.h>
int main()
{
const double pi = acos(-1.0);
double r, h, s1, s2, s;
scanf("%lf%lf", &r, &h);
s1 = pi*r*r;
s2 = 2*pi*r*h;
s = s1*2.0 + s2;
printf("Area = %.3f\n", s)
return 0;
}
例题1-2 输入一个三位数,分离出它的百位、十位和个位,反转后输出。 样例输入: 127 样例输出: 721。
如果 在比赛中发现题目有漏洞,应向相关人员询问,尽量不要自己随意假定。 根据不同情况执行不同指令。
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
printf("%d%d%d\n", n%10, n/10%10, n/100);
return 0;
}
#include<stdio.h>
int main()
{
int n, m;
scanf("%d", &n);
m = (n%10)*100 + (n/10%10)*10 + (n/100);
printf("%03d\n", m);
return 0;
}
例题1-3 输入两个整数a和b,交换二者的值,然后输出。 样例输入: 824 16 样例输出: 16 824
经典方法:三种变量
使用范围狭窄:
#include<stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
a = a + b;
b = a - b;
a = a - b;
printf("%d %d\n", a, b);
return 0;
}
最合适:
#include<stdio.h>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d %d\n", b, a);
return 0;
}
目标是解决问题,不是展示编程技巧,越简单越好。
例题1-4 已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目。如 果无解,则输出No answer。
#include<stdio.h>
int main()
{
int a, b, n, m;
scanf("%d%d", &n, &m);
a = (4*n-m)/2;
b = n-a;
if(m % 2 == 1 || a < 0 || b < 0)
printf("No answer\n");
else
printf("%d %d\n", a, b);
return 0;
}
例题1-5 输入3个整数,从小到大排序后输出。 样例输入: 20 7 33 样例输出: 7 20 33
算法竞赛的目标是编程对任意输入均得到正确的结果,而不仅是样例数据。
#include<stdio.h>
int main()
{
int a, b, c, t;
scanf("%d%d%d", &a, &b, &c);
if(a > b) { t = a; a = b; b = t; } //执行完毕之后a≤b
if(a > c) { t = a; a = c; c = t; } //执行完毕之后a≤c,且a≤b依然成立
if(b > c) { t = b; b = c; c = t; }
printf("%d %d %d\n", a, b, c);
return 0;
}
编译器:C99中,double的输出必须用%f,而输入需要用%lf
1.5 注解与习题
习题一:输入3个整数,输出它们的平均值,保留3位小数。
习题二:输入华氏温度f,输出对应的摄氏温度c,保留3位小数。提示:c=5(f-32)/9。
例题三:输入正整数n,输出1+2+…+n的值。提示:目标是解决问题,而不是练习编程。
例题四:输入正整数n(n<360),输出n度的正弦、余弦函数值。提示:使用数学函数。
例题五:一件衣服95元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金 额(单位:元),保留两位小数。
例题六:输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的3个边长。如果 可以,则输出yes,如果不能,则输出no。如果根本无法构成三角形,则输出not a triangle。
例题七:输入年份,判断是否为闰年。如果是,则输出yes,否则输出no 。
问题:
问题一:
C语言的limits.h文件:
#ifndef MY_LIMITS_H
#define MY_LIMITS_H
#ifndef MY_YVALS_H
#include "my_yvals.h"
#endif
/**char properties*/
#define CHAR_BIT
#if _CSIGN
#define CHAR_MAX 127
#define CHAR_MIN (-127 - _C2) /**由my_yvals.h可知_C2为1*/
#else
#define CHAR_MAX 255
#define CHAR_MIN 0
#endif // _CSIGN
#if _ILONG
#define INT_MAX 2147483647
#define INT_MIN (-2147483647 - _C2)
#define UINT_MAX 4294967295
#else
#define INT_MAX 32767
#define INT_MIN (-32767 - _C2)
#define UINT_MAX 65535
#endif // _ILONG
#define LONG_MAX 2147483647
#define LONG_MIN (-2147483647 - _C2)
#define MB_LEN_MAX _MBMAX
#define SCHAR_MAX 127
#define SCHAR_MIN (-127 - _C2)
#define SHRT_MAX 32767
#define SHRT_MIN (-32767 - _C2)
#define UCHAR_MAX 255
#define ULONG_MAX 4294967295
#define USHRT_MAX 65535
#endif
问题二:16位
问题三:double型浮点数最大正数值和最小正数值-2^1024 ~ +2^1024。
问题四:逻辑运算符的优先级 ||(or)<&&(and)<!(not)。
问题五:if(a)if(b)x++;else y++
如果 a 为真且 b 也为真 ,x ++ ;如果b为假,y++ 。else和最近的if匹配。办法:写上大括号{ } 。