一、猴子吃桃问题(while)
猴子第一天摘了若干了桃,
当即就吃了一半数量的桃,没吃过瘾,又多吃了一个
第二天,又将剩下桃吃了一半,没吃过瘾,又多吃了一个
依次类推,直到第十天想吃桃的时候,发现只剩下一个了。
问:猴子第一天摘了多少个桃?
思路:
1.从第十天倒推:第十天只剩下一个了,设第九天吃了n个,n-1即为第十天剩下的 那一个,所以n为2,又因为吃的是当天总量的一半加1,所以第九天总共为4个。以此类推第八天即为(4+1)乘以2,也就是10个。总结来说就是下一天与上一天的桃子数量关系为(n+1)*2
#include <stdio.h>
int main(int argc, char const *argv[])
{
int n = 1; //第十天剩下的那一个
int day = 10; // 天数
while(day > 1){
n = (n+1)*2;
day--;
}
printf("第%d天采摘了%d桃子\n",day,n);
return 0;
}
结果:第1天采摘了1534桃子
二、水仙花数(for)
输出 (100,1000) 范围内所有的 水仙花 数
水仙花数:自身 == 个位*个位*个位 + 十位*十位*十位 + 百*百*百
例:
153 = 3*3*3 + 5*5*5 + 1*1*1 = 27 + 125 +1 = 153
#include <stdio.h>
int main(int argc, char const *argv[])
{
int i = 100; //从一百开始
int ge = 0; //个位
int shi = 0; //十位
int bai = 0; //百位
for(i = 100; i < 1000; i++){
ge = i % 10; //例: 153 % 10 =3
shi = i / 10 % 10; //例: 153 / 10 = 15 15 % 10 = 5
bai = i / 100
if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){
printf("%d ",i);
}
}
printf("\n");
return 0;
}
结果: 153 370 371 407
三、使用C语言的控制语句输出下面的图案 (for)
F
_FE
__FED
___FEDC
____FEDCB
_____FEDCBA
#include <stdio.h>
int main(int argc, const char *argv[]) {
int i = 0;
int j = 0;
int k = 0;
char value = 'F';
//外层循环控制输出的行数
for(i = 0; i < 6; i++){
//内层循环控制输出 下划线 的个数
for(j = 0; j < i; j++){
printf("_");
}
value = 'F';//每次都从 F 开始输出
//控制输出 字母 的个数
for(k = 0; k <= i ; k++){
printf("%c", value);
value‐‐;
}
//每行内容都输出完之后 再换行
printf("\n");
}
return 0;
}
四、冒泡排序
4.1 基本思想:
相邻的两个元素之间进行比较,按照要求进行交换。
4.2 详细步骤:(以升序为例 从小到大)
第一趟排序:
将第一个元素和第二个元素进行比较,将较大放在后面,
然后第二个元素和第三个元素进行比较,将较大的放在后面,
依次类推,直到第一趟排序结束,最大的元素就在最后一位了
第二趟排序:
将第一个元素和第二个元素进行比较,将较大放在后面,
然后第二个元素和第三个元素进行比较,将较大的放在后面,
依次类推,直到第二趟排序结束,第二大的元素就在倒数第二位了依次类推,
直到最后一趟排序完成,整个序列就有序了。
#include <stdio.h>
int main(int argc, const char *argv[]) {
int s[10] = {12,34,5,3,6,45,67,98,55,1};
int i = 0;
int j = 0;
int temp = 0;
int len = sizeof(s)/sizeof(s[0]); //排序前
for(i = 0; i < 10; i++){
printf("%d ",s[i]);
}
putchar(10);
//外层循环控制比较的趟数
//当只剩下最后一个元素时,就不用再比了 所以 可以少比一趟
for(j = 0; j < len‐1; j++){
//内层循环用来找每趟的最大值
//因为每趟都能确定一个最大值,所以每趟都可以少比一个元素 所以 ‐j
for(i = 0; i < len‐1‐j; i++){
if(s[i] > s[i+1]){
temp = s[i]; 36 s[i] = s[i+1];
s[i+1] = temp;
}
}
}
//排序后
for(i = 0; i < 10; i++){
printf("%d ",s[i]);
}
putchar(10);
return 0;
}