11.判断某一年是否是闰年。

//判断某一年份是否是闰年
int IsLeapYear(int year)
{return (year % 400 == 0 || (year % 4 == 0) && (year % 100 != 0));
}

运行结果:

12.获得某年、某月的最大天数。

//获得某年、某月的最大天数
int GetMaxDay(int year,int month)
{switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;case 4:case 6:case 9:case 11:return 30;case 2:return IsLeapYear(year)?29:28;        default:return -1;}
}

运行结果:

13.输入某年某月某日,判断这一天是这一年的第几天?

//输入某年某月某日,判断这一天是这一年的第几天?
/*
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
情况,闰年且输入月份大于3时需考虑多加一天。
*/
int GetDays(int year,int month,int day)
{int sum = 0;int i;for(i = 1; i < month; i++)      //将前几个月天数相加sum += GetMaxDay(year,month);sum = sum + day;  //加上本月的天数,就是总天数return sum;
}

运行结果:

更多关于日期的算法,请参见我的博客《关于日期的常用算方法》(java版)。

14.求一个数的阶乘。

//递归求阶乘
long factorial(long n)
{if(n <= 1)return 1;else return n * factorial(n-1);
}
//非递归求阶乘
long Factorial(long n)
{int sum,i;sum = 1;for(i = 1; i <= n; i++)sum *= i;return sum;
}

运行结果:

这里求得的阶乘只能是较小数的阶乘,想求得200或更大数的阶乘就无能无力了,所以必须通过其他的算法来实现。

关于更大数的阶乘,大家可以参见我的博客《大数阶乘的实现》

15.求两个数的最大公约数和最小公倍数。

//求两个数的最大公约数
int gcd(int a,int b)
{int r;if(a < b)        //a < b,则交换两个数{int temp = a;a = b;b = temp;}r = a % b;while(r != 0){a = b;b = r;r = a % b;}return b;
}
//求两个数的最小公倍数数
int lcm(int a,int b)
{return a*b/gcd(a,b);
}

运行结果:

16.打印出三位的"水仙花数",所谓"水仙花数"是指一个N位数,其各位数字立方和等于该数。

//打印出三位的"水仙花数",所谓"水仙花数"是指一个N位数,其各位数字立方和等于该数
void WaterFlowerNumber()
{int i,j,k,n;printf("Water flower number is:");for(n = 100; n < 1000; n++){i = n/100; //分解百位j = n/10 % 10; //分解十位k = n % 10; //分解个位if(i*i*i + j*j*j + k*k*k == n)printf("%-5d\n",n);}
}

运行结果:

大家还可以考虑一下,如何打印21位“水仙花”数? (基本思想和《大数阶乘的实现》及《求任意位数的Pi》的思想相同,即用数组存储)。

17.不依赖第三个变量,实现两个整数交换。

/不依赖第三个变量,实现两个整数交换
//第一种方法
void Exchange1(int* a,int* b)
{*a = *a + *b;*b = *a - *b;*a = *a - *b;
}
//第二种方法(用位运算)
void Exchange2(int* a,int* b)
{*a = *a ^ *b;*b = *a ^ *b;*a = *a ^ *b;
}

运行结果:


18.将10进制的数转换为2-16进制。

//将10进制数转换为其它进制
void From10baseTransformTo1_16(int m,int base)
{char num[] = "0123456789ABCDEF";char result[30] = {0};int len = 0;char temp;int start = 0;int end = len;while(m)                //辗转相除,先存正向的余数{result[len++] = num[m%base];m = m / base;}start = 0;end = len-1;while(start < end)   //字符串翻转{temp = result[start];result[start] = result[end];result[end] = temp;start++;end--;}start = 0;for(start = 0; start < len; start++)printf("%c",result[start]);printf("\n");}

运行结果:


19.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

//将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
void DivideFactor(int n)
{int i; printf("\nplease input a number:\n"); scanf("%d",&n); printf("%d=",n); for(i=2;i<=n;i++) { while(n!=i) { if(n%i==0) { printf("%d*",i); n=n/i; } else {break;}} } printf("%d",n);}

运行结果:

20.猴子吃桃问题:

猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
程序分析:采取逆向思维的方法,从后往前推断。

void MonkeyEatPeach()
{int day,x1,x2;day=9;x2=1;while(day>0){x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/x2=x1;day--;}printf("the total is %d\n",x1);
}

运行结果:

转载请标明出处:http://blog.csdn.net/u012027907/article/details/12720357

C语言经典算法100例(二)相关推荐

  1. c语言经典算法大全pdf,c语言经典算法100例pdf版.pdf

    c语言经典算法100例pdf版 C 语言经典算法 100 例 C 语言编程经典 100 例 A:[程序1] 题目:有1.2.3.4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程 ...

  2. C语言经典算法100例

    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔 子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数 为多少? _______________________ ...

  3. C语言经典算法100例(一)

    C语言中有有许多经典的算法,这些算法都是许多人的智慧结晶,也是编程中常用的算法,这里面包含了众多算法思想,掌握这些算法,对于学习更高级的.更难的算法都会有很大的帮助,会为自己的算法学习打下坚实的基础. ...

  4. C语言经典算法100例-002-数轴的使用

    题目如下: 企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提 成7.5%:20万 ...

  5. C语言经典算法100例-结束语

    今天看了以下后面的题,并不怎么好,因为我们主要是学C++,而练习这些题的主要目的是帮我们复习编程的基本技巧,而基本技巧编到这里已经差不多了,至于算法,还是去看算法导论和编程珠玑,指针深层的东西,可以去 ...

  6. C语言经典算法100例-037-给10个数排序

    使用简单选择排序法给10个数排序,思路如下: 将最小的元素找出并放到序列的最前面,在剩下的元素中继续找出最小的元素放在第二个位置上,以此类推,每次选出一个元素,即可确定其再有序序列中的最终位置. #i ...

  7. C语言经典算法100例-022-乒乓球比赛名单问题

    我们来看题: 两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单. ...

  8. C语言经典算法100例-031-判断星期几

    题目如下: 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母. 比较简单,直接看程序吧. #include <stdio.h> #include < ...

  9. C语言经典算法100道实战题

    [C语言经典算法100道实战题]适合具备C语言基础语法的同学学习,提高编写程序的逻辑思维能力和算法设计能力专门精心设计.100个经典的算法供大家练习及配套对应的录播视频.为我们今后学习其它的编程语言和 ...

最新文章

  1. 【238】◀▶IEW-Unit03
  2. findHomography(src_points, dst_points, CV_RANSAC)
  3. 语言 读ini文件_让C语言的调试更加高大上
  4. 此文胜过你听三年的培训课
  5. 探索式测试的思维模型
  6. 6-5 顺序表操作集 (20 分)(创建,查找,插入,删除)以及顺序表的理解
  7. enter power save mode解决
  8. VB讲课笔记09:过程
  9. 《个体软件过程》—第1章1.3节个体软件过程
  10. MD5加密,Base64加密/解密,AES加密/解密
  11. python识图 web_python+flask搭建CNN在线识别手写中文网站
  12. 《Cocos Creator游戏实战》打砖块主要功能与逻辑实现
  13. 《活出生命的意义》生命之意义
  14. 360视频:金字塔棱台投影TSP
  15. 【大数据开发】SparkSQL——RDD、DataFrame、DataSet相互转换、DSL常用方法、SQL风格语法、Spark读写操作、获取Column对象的方式
  16. Window10 打开ftp服务
  17. 易数云数据抓取词云图制作
  18. 设置vim 显示行号
  19. CS144-Lab0
  20. Linux下抓包工具tcpdump使用

热门文章

  1. java-Java可以对方法进行序列化?
  2. mac环境下的linux光标快捷键
  3. Java温故而知新(1)集合类
  4. dataTables-使用详细说明整理
  5. 将shp文件导入到GeoDatabase中
  6. 《多处理器编程的艺术》读书笔记(4)--- 自旋锁(1)
  7. 设计模式 — 行为型模式 — 解释器模式
  8. Tungsten Fabric SDN — Orchestrator 集成部署模式 — with Kubernetes
  9. AWS — AWS Snow 系列
  10. Tungsten Fabric SDN — 网络架构