作业讲解
金字塔
#include <stdio.h>int main()
{long long n, i, j;// scanf()如果读到文件末尾, 会返回 EOF, EOF 在 C 语言中的值为 -1// 返回值的意思是, a = scanf(), scanf() 的返回值会赋给 a// while(~scanf("%lld", &n))while(scanf("%lld", &n) != EOF){
// 循环每一行for(i = 1; i <= n; i ++ ){
// 输出空格for(j = 1; j <= n - i; j ++ )printf(" ");
// 输出*for(j = 1; j <= 2 * i - 1; j ++ )printf("*");
// 换行, puts("")会输出双引号内的字符并换行puts("");}}return 0;
}
字符数
#include<stdio.h>int main()
{char c;long long sum = 0;// getchar()每次只会读入一个字符, 包括换行符和空格// 检测读到文件末尾while ((c = getchar()) != EOF){
// 因为题目中说了输入只有一行, 所以只需要考虑将空格过滤掉if(c != ' ') sum++;}
// 输出检测到了多少个字符printf("%lld", sum);return 0;
}
体检
#include <stdio.h>int main()
{long long a,ans;scanf("%lld", &a);while(a){
// 每一次都有一半(向上取整)的人合格, 只剩下 a / 2 的人a /= 2;
// 记录多少次ans ++;}printf("%lld\n", ans);return 0;
}
售票员
#include <stdio.h>int main()
{
// a, b, c 用于记录手上有几张 10 元, 几张 30 元, 几张 100 元
// temp 用于记录当前来买票的客人拿着多少钱long long a = 0, b = 0, c = 0, temp;while(scanf("%lld", &temp) != EOF){
// 10 元的话, 皆大欢喜, 给票收钱就可以了if(temp == 10){a ++;}
// 30 元的话, 需要有两张 10 元来找零else if(temp == 30){if(a >= 2){a -= 2;b ++;}else{puts("NO");
// return 0 可以直接结束这个函数return 0;}}
// 如果拿了 100 元else{
// tempb 用于存找零用几张 30 元long long tempb;
// 如果 b 大于 3, 用 3 张 30 元, 这里注意, 优先用 30 元找零, 因为 30 只能用于找 100if(b > 3){tempb = 3;}else{tempb = b;}// 如果能找的开if(tempb * 3 + a >= 9){b -= tempb;a -= 9 - tempb * 3;}else{puts("NO");return 0;}}}
// 如果没有在中间出问题puts("YES");return 0;
}
区间判断回文数
#include <stdio.h>int main()
{long long n, i, num, j, a, b;scanf("%lld%lld", &a, &b);// 检查从 a 到 b 的每一个数字for(i = a; i <= b; i ++ ){long long m = i;num = 0;// 将 i 倒过来while (m){num = num * 10 + m % 10;m /= 10;}if(num == i){printf("%lld\n", num);}}return 0;
}