︿( ̄︶ ̄)︿hi~~
ヽ( ̄ω ̄( ̄ω ̄〃)ゝ本次刷题发现3个比较有趣的题目,分享给您,希望对您有所帮助,谢谢❀❀~
目录
1.单词覆盖还原(单词的连续性)
2.输出数字三角形(循环的灵活运用)
3.收金币(奇妙的思考)
1.单词覆盖还原(单词的连续性)
题目描述
一个长度为l的字符串中被反复贴有 `boy` 和 `girl` 两单词,后贴上的可能覆盖已贴上的单词(没有被覆盖的用句点表示),最终每个单词至少有一个字符没有被覆盖。问贴有几个 `boy` 几个 `girl`?
输入格式
一行被反复贴有 `boy` 和 `girl` 两单词的字符串。
输出格式
两行,两个整数。第一行为 `boy` 的个数,第二行为 `girl` 的个数。
样例输入:
......boyogirlyy......girl.......
样例输出 :
4
2
代码如下:
#include <stdio.h>
int main()
{char a[300];int boy=0,girl=0;gets(a);for(int i=0;a[i]!='\0';i++)
{if(a[i]=='b'||a[i+1]=='o'||a[i+2]=='y'){boy++;}
if(a[i]=='g'||a[i+1]=='i'||a[i+2]=='r'||a[i+3]=='l'){girl++;}
}
printf("%d\n",boy);
printf("%d",girl);
return 0;
}
参考题解:
这里利用了计算机重复计算的功能,且有每个单词都是连续的,这样就可以通过if(a[i]=='b'||a[i+1]=='o'||a[i+2]=='y')这种类似的判断进行计数了~︿( ̄︶ ̄)︿
2.输出数字三角形(循环的灵活运用)
题目描述
给出 n,请输出一个直角边长度是 n 的数字直角三角形。所有数字都是 2 位组成的,如果没有 2 位则加上前导 0。
输入格式
输入一个正整数 n。
输出格式
输出如题目要求的数字直角三角形。
样例输入:
5
样例输出:
0102030405
06070809
101112
1314
15
代码如下:
void f(int k)
{if(k<10)printf("0%d",k);elseprintf("%d",k);}
int main()
{int n;scanf("%d",&n);int m=1;int count=n;int k=1;for(int i=1;m!=n+1;i++){for(int j=0;j<count;j++){f(k++); }printf("\n");count--;m++;}return 0;
}
参考题解:
两个for循环的分工明确:
以i为变量的for循环作为数字三角的竖排,每一层都会多一,所以m++;以j为变量的for循环作为数字三角的横排,每一层都会少一,所以count--;
3.收金币(奇妙的思考)
题目描述
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续 n 天每天收到 n 枚金币后,骑士会在之后的连续 n+1 天里,每天收到 n+1 枚金币。
请计算在前 k 天里,骑士一共获得了多少金币。
输入格式
一个正整数 k,表示发放金币的天数。
输出格式
一个正整数,即骑士收到的金币数。
样例输入:
6
样例输出:
14
代码如下:
#include <stdio.h>
int main()
{long sum=0;int a,count=1;scanf("%d",&a);for(int i=1;i<=a;i++){a-=i;sum+=count*count;count++;}printf("%ld",sum+a*count);return 0;
}
参考题解:
本题代码很少,但做法十分有趣,其中i<=a;i++;a-=i这三句表达式很好解决了每隔n天发n枚金币的情况,count++解决的是每次发金币的数量会+1.
本次的分享就到这里了,希望对您有所帮助,我们下期见了~~
白白~○( ^皿^)っ