总结:冒泡排序 还是没有上强度 只接触到了一个简单算法
国庆题二
一、判断回文数
输入一串字符,字符个数不超过100,且以"."结束。 判断它们是否构成回文。
输入
输入只有一行,包括一串字符.
样例输入
12321.
输出
输出只有一行.TRUE 或者FALSE
样例输出
TRUE
代码实现
#include <string.h>
char hui(char a[]) {
int i, j;
int len;
len = strlen(a);
for (i = 0; i < len / 2; i++) {
if (a[i] != a[len - i - 1])
return 0;
}
return 1;
}
int main()
{
char a[100];
scanf("%s", &a);
char h = hui(a);
if (h)
printf("TRUE");
else
printf("FALSE");
return 0;
}
经验总结
%s,对循环的灵活应用。
二、中位数(冒泡排序)
中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数(或最中间两个数据的平均数).
给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数,意思就是直接舍掉0.5)
输入
该程序包含多组测试数据,每一组测试数据的第一行为N,代表该组测试数据包含的数据个数,1<=N<=10000.
接着N行为N个数据的输入,N=0时结束输入
样例输入
1
468
15
501
170
725
479
359
963
465
706
146
282
828
962
492
996
943
0
输出
输出中位数,每一组测试数据输出一行
样例输出
468
501
代码实现
int a[1000];
void bbsort(int n, int a[]) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
void read(int a[]) {
for (int i= 0;; i++) {
scanf("%d", &a[i]);
if (a[i] == 0)
break;
}
}
void print(int n, int a[]) {
int result = (n % 2) == 0 ? (a[n / 2] + a[n / 2 - 1]) / 2 : a[n / 2];
printf("%d", result);
}
int main() {
int n;
scanf("%d", &n);
read(a);
bbsort(n,a);
print(n, a);
}
经验总结
冒泡排序
开始有模块化编程的意识
三、打印日期
给出年分m和一年中的第n天,算出第n天是几月几号。(考虑到有闰年:①能被400整除②或能被4整除,并且不能被100整除)
输入
输入包括两个整数y(1<=y<=3000),n(1<=n<=366)。
样例输入
2013 60
2012 300
2011 350
2000 211
输出
可能有多组测试数据,对于每组数据,按 yyyy-mm-dd的格式将输入中对应的日期打印出来。
样例输出
2013-03-01
2012-10-26
2011-12-16
2000-07-29
代码实现
int run(int y) {
return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}
int main()
{
int a[2][13] = { {0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31} };
int y, m, d;
int i;
while (scanf("%d%d", &y, &d) != EOF) {
int r = run(y);
for (i = 1; i <= 12; i++) {
if (d <= a[r][i])
break;
else
d = d - a[r][i];
}
printf("%04d-%02d-%02d\n", y, i, d);
}
return 0;
}
经验总结
开拓了二维数组使用的视野 格式化字符输出