算法&数据结构
算法&数据结构
乐享小栈
这个作者很懒,什么都没留下…
展开
-
字符串转整数,不使用任何C语言库函数
今天一个朋友问我的,就顺手写了,倒是很简单,就是涉及到一些基础知识,学习越深越不能忘本#include <stdio.h>//字符串转整数,不使用任何C语言库函数int main(){ char s[] = "2945434"; int len = 0; while (s[len++]); len--; int res = 0; int t = 1;原创 2017-08-02 18:07:18 · 665 阅读 · 0 评论 -
递归和尾递归的区别和原理
递归和尾递归的区别和实现 基本上大多数C的入门教材里都会说简单的递归,例如求阶乘n!,经典的本科入门书籍谭浩强的《C语言程序设计》,但后来看了《代码大全2》这本书,关于进阶和编码规范的书中提到了,这些计算机教材用愚蠢的例子阶乘和斐波那契数列来讲解阶乘,因为递归是强有力的工具,但用阶乘去计算阶乘之类的,很不明智,除了速度慢,还无法预测运行期间内存的使用情况,而且递归比...原创 2018-01-02 14:04:33 · 2339 阅读 · 1 评论 -
排列
用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必太动脑筋。#include<stdio.h>int main(){ int min = 123; int max = 329; for (int i = min; i <= max;i++原创 2017-10-26 22:57:16 · 225 阅读 · 0 评论 -
分数化小数
输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b≤10 6 ,c≤100。输入包含多组数据,结束标记为a=b=c=0。样例输入:1 6 4 0 0 0样例输出:Case 1: 0.1667这个题基本思路是模拟手算除法过程,每次拿余数乘10作为下一次除数,求得的商作为小数的一位。难点在于尾数为9时四舍五入,这里用一个carry函数处理进位,采用递归结构,解决了多次进位的问题。#原创 2017-10-26 11:41:22 · 283 阅读 · 0 评论 -
子序列的和
输入两个正整数n<m<10 6 ,输出 ,保留5位小数。输入包含多组数据, 结束标记为n=m=0。提示:本题有陷阱。样例输入:2 4 65536 655360 0 0样例输出:Case 1: 0.42361 Case 2: 0.00001注:陷阱就是在n特别大时如果直接n*n就会溢出,所以只能连除两次#include<stdio.h>int main(){ int count =原创 2017-10-25 22:32:09 · 3843 阅读 · 3 评论 -
倒三角形
输入正整数n≤20,输出一个n层的倒三角形。例如,n=5时输出如下: ######### ####### ##### ### ##include<stdio.h>int main(){ int n = 0; scanf("%d",&n); for (int i = n; i > 0;i--){ int space = n原创 2017-10-25 20:26:19 · 959 阅读 · 0 评论 -
水仙花数
输出100~999中的所有水仙花数。若3位数ABC满足ABC=A 3 +B 3 +C 3 ,则称其为水仙花数。例如153=1 3 +5 3 +3 3 ,所以153是水仙花数。#include<stdio.h>#include<math.h>int main(){ int i = 100; for (i; i <= 999;i++){ int ge = i % 10原创 2017-10-25 16:27:00 · 249 阅读 · 0 评论 -
7744问题
输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位数字也相等)。枚举aabb先找出所有平方在1000-10000之间的数,然后判断是否符合aabb的形式#include<stdio.h>#include<stdbool.h>bool isLegal(int temp){ int qian = temp / 1000; int tt = temp % 1000;原创 2017-10-06 14:31:06 · 463 阅读 · 0 评论 -
鸡兔同笼
已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目。如 果无解,则输出No answer。 样例输入: 14 32 样例输出: 12 2 样例输入: 10 16 样例输出: No answer#include<stdio.h>int main(){ int n, m; int a, b; scanf("%d%d", &n, &m);原创 2017-09-30 13:59:26 · 1029 阅读 · 0 评论