第四周学习总结
这周的学习时做到的两道比较有意思的题目,和大家分享分享。虽然是在学习C语言经典100题,网上的答案也很多,但我更希望能换不同的角度去重新学习并编写
古典问题(兔子生崽)
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
首先,确立题目中出现兔子的三种属性
小兔子:经过两个月可以长成兔子并生出一对小兔子
一个月大的兔子:经过一个月可以长成兔子并生出一对小兔子
兔子:每个月生出一对小兔子
其次,做个流程图用于理清从小兔子变成兔子的流程
代码:
#include <stdio.h>
int main(int arg , const char **argv){
int small_rabbits = 0;//小兔子
int one_month_rabbits = 0;//一个月大的兔子
int rabbits = 0;//兔子
int month = 0;//经过的月份
int sum = 0;//所有兔子的总数
//根据属性判断一开始的兔子属于小兔子
small_rabbits = 1;
for (month = 1; month <= 40; month++)
{
//判断有多少兔子
rabbits = rabbits + one_month_rabbits;
//判断有多少一个月大的兔子
one_month_rabbits = small_rabbits;
//判断有多少小兔子
small_rabbits = rabbits;
sum = rabbits + one_month_rabbits +small_rabbits;
//输出总的兔子的数量
if (month == 1)
{
printf("%d month:%d\r\n",month,sum);
}
else
{
printf("%d months:%d\r\n",month,sum);
}
}
return 0;
}
乒乓球比赛
两个乒乓球队进行比赛,各出三人。甲队为A,B,C三人,乙队为X,Y,Z三人。已抽签决定比赛名单。有人向队员打听比赛的名单.A说他不和X比,C说他不和X,Z比,请编程序找出三队赛手的名单。
#include <stdio.h>
int main(int arg,const char **argv){
char first[3] = {'C','A','B'};//初始数组,按这样排序是根据条件个数来排的,只有这样才能将筛选后最后剩余的传给B
char second[3] = {'X','Y','Z'};
char group[3][2] = {0};//二维数组用来配对
int times =0;
int count = 0;
for (times = 0; times < 3; times++)
{
group[times][0] = first[times];
}//传入第一组数据用于筛选
for (count = 0; count < 3; count++)
{
for (times = 0; times < 3; times++)
{
group[count][1] = second[times];
if (group[count][0] == 'C' && group[count][1] == 'X')
{
continue;
}
else if (group[count][0] == 'C' && group[count][1] == 'Z')
{
continue;
}
else if (group[count][0] == 'A' && group[count][1] == 'X')
{
continue;
}
else if (group[count][1] == 0)
{
continue;
}
else
{
second[times] = 0;
//将已经选择的替换成0,保证不会有重复选择
break;
}
}
}
for (count = 0; count < 2; count++)
{
for (times = 0; times < 3; times++)
{
printf("%c ",group[times][count]);
}
printf("\r\n");
}
return 0;
}