1. 小乐乐走台阶:(可递归、可dp)
思路:
用dp存数组
我差点忘了牛客网的ACM模式,需要你把头文件什么的都写出来
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n;
scanf("%d", &n);
int a[32];
a[0] = 1;
a[1] = 1;
a[2] = 2;
for (int i = 3; i <= n; i++)
{
a[i] = a[i - 1] + a[i - 2];
}
printf("%d", a[n]);
return 0;
}
2. 序列中删除指定数字
牛客网需要自己写头文件
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int f;
int res[51] = { 0 };
scanf("%d", &f);
// scanf需要在main中
for (int i = 0; i <= f - 1; i++)
{
scanf("%d", &res[i]);
}
int find;
scanf("%d", &find);
for (int i = 0; i <= f-1; i++)
{
if (res[i] != find)
{
printf("%d ", res[i]);
}
}
}
3.
输出的时候,结果离奇,后来发现自己printf(“%d”, &),输出别加&,scanf才加&
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n;
int max = 0;
int min = 0;
int a[10000] = { 0 };
scanf("%d", &n);
for (int i = 0; i <= n - 1; i++)
{
// 这个题特别在,输入10个数字,我用10个%d吗
scanf("%d", &a[i]);
if (i == 0) { min = a[0]; max = a[0]; }
if (a[i] < min) { min = a[i];}
if (a[i] > max) { max = a[i];}
}
int res = 0;
res = max - min;
printf("%d", res);
return 0;
}
4. 大小写转换
思路:
- 数字:65、90、97、122,大小写差32 , 边界差25, 差26个字母
- putchar():输出字符为单独一行
getchar():这里用int ch接受getchar() 输出ch结果只能是%d 且ch还是int类型, 此外putchar(ch)输出会转为字符 - getchar()去换行
- (ch=getchar())!=EOF EOF在读文件时候是结束符标志,但是输出过程中,一直不会结束 且这里循环过程就会接收字符
#include<stdio.h>
int main()
{
int ch;
int res = 0;
while ((ch = getchar()) != EOF) {
// 去除\n
getchar();
// printf("第一个char是%d\n", res);
if (ch >= 65 && ch <= 90)
{
ch += 32;
putchar(ch); // 单个字符输出为一行
}
else if(ch>=97 && ch<=122)
{
ch -= 32;
putchar(ch);
}
else
{
continue;
}
printf("\n");
}
return 0;
}
5.
思路:像上一题一样getchar()去换行符
注意:这里用到把int给char时,对ch应该强转 char a = (char)ch;
int main()
{
int ch;
while ((ch=getchar())!=EOF)
{
if ((65<=ch && ch<=90) ||(97<=ch && ch<= 122))
{
getchar();
char a = (char)ch;
printf("%c is an alphabet.\n", a);
}
else
{
getchar();
char a = (char)ch;
printf("%c is not an alphabet.\n", a);
}
}
return 0;
}
6. 最高分数
scanf:接受一行一行的数据和一行内多个数据都行
三目运算符
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a;
int b;
int c;
int res;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
res = a > b ? a:b;
res = res > c ? res : c;
printf("%d", res);
return 0;
}
7. 变种水仙花
取模
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
// 遍历五位数
for (int i = 10000; i <= 99999; i++)
{
// 每个数组有4种情况 需要8个变量拿到8个值
int a1;
int a11;
int a2;
int a22;
int a3;
int a33;
int a4;
int a44;
// 10000 = 1+4 2+3 3+2 4+1
a1 = i/10000;
a11 = (i - a1*10000) % 10000;
// a2错了,要拿前2位
a2 = i/1000;
a22 = (i-a2*1000)%1000 ; // 结果是整数
a3 = i / 100;
a33 = (i - a3 * 100) % 100;
a4 = i / 10;
a44 = (i-a4*10)%10;
// printf("%d %d %d %d %d %d %d %d", a1, a11, a2, a22, a3, a33, a4, a44);
if (a1 * a11 + a2 * a22 + a3 * a33 + a4 * a44 == i)
{
printf("%d ", i);
}
}
return 0;
}