c/c++感受算法乐趣(1)
开始时间2023-04-14 18:31:47
结束时间2023-04-14 22:06:02
前言:经过两天的学习,是不是发现编程也挺简单的。其实不然,学好算法同时也是练习编程的关键一环。接下来每周末我将会带领你感受算法的乐趣。目前题目摘自c语言趣味编程100例清华大学出版社,我会根据编程四部曲给出每题题解,话不多说让我们一起来看看吧!
第一章 趣味算法入门
第一题 百钱白鸡问题
一.问题描述
二.设计思路
本题无输入,百钱最多买公鸡20只,母鸡33只,小鸡很多只,很明显可以用三个嵌套循环模拟,达成条件为公鸡加母鸡加小鸡为100只而且用百钱;
三.流程图
四.源代码
#include<stdio.h> int main() { int gongji,muji,xiaoji; for(gongji=0;gongji<20;gongji++) { for(muji=0;muji<33;muji++) { for(xiaoji=0;xiaoji<=100;xiaoji++) { if((gongji*5+muji*3+xiaoji/3.0)==100&&(gongji+muji+xiaoji)==100) { printf("公鸡=%d只\t母鸡=%d只\t小鸡=%d只\n",gongji,muji,xiaoji); } } } } return 0; }
五.运行结果
第二题 借书方案知多少
一.问题描述
二.设计思路
无输入,很明显的枚举模拟,a可以选五次,同理bc也一样,但要满足abc三位小朋友借到的不是一本书即if(a!=b,b!=c,c!=a)
三.流程图
四.源代码
#include<stdio.h> int main() { int a,b,c,i=0; for(a=1;a<=5;a++) { for(b=1;b<=5;b++) { for(c=1;c<=5;c++) { if(a!=b&&b!=c&&c!=a) { printf("a分到第%d本书 b分到第%d本书 c分到第%d本书",a,b,c); i++; if(i%3==0)printf("\n"); } } } }printf("共有%d种分法",i); return 0; }
五.运行结果
第三题 打鱼还是晒网
一.问题描述
二.设计思路
本题有输入(输入为某一天的年月日信息),我们可以先求出这一天距离1990.1.1的天数,然后以五为周期求余数,余数为123则打鱼,余数为40则为晒网;
三.流程图
四.源代码
#include<stdio.h> int main() { printf("请以年月日的格式输入指定日期"); int year,month,day; int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; scanf("%d %d %d",&year,&month,&day); int sum=0; int i=1990; for(i=1990;i<year;i++) { sum+=365; if((i%4==0&&i%100!=0)||(i%400==0)) { sum++; } } for(i=0;i<month-1;i++) { if(month==1)break; sum+=a[i]; } if(month>2){ if((year%4==0&&year%100!=0)||(year%400==0)) { sum++; } } sum+=day-1; int yush=sum%5; if(yush%5==1||yush%5==2||yush%5==3) { printf("打鱼"); } else { printf("晒网"); } return 0; }
五.运行结果