《C语言名题精选百则----10》
来源:互联网 发布:养鸡场源码 编辑:程序博客网 时间:2024/05/16 01:45
呃,怎么说呢,这本书的前面写着,不必按照书的安排顺序,可以自由选择顺序阅读。
我承认,我对数值问题实在是不感兴趣,于是今天跳到了第三章。
上一篇是11,这个我也数不清是多少了,干脆写成10,这样的话,不论用什么顺序,只要什么时候这个数字凑成100,这本书算是做过一遍来了。
废话少说,先上题目:
先不要看下面,给你半小时,你能想出一个好的想法吗?
反正我没有想出,答案确实很精妙,看看吧:
源代码无法正常显示就点击右键 ->查看源代码。
#include<stdio.h>#include<stdlib.h>#define MAXSIZE 20#define LOOP 1int main(){char digit[MAXSIZE];int i,j;int n;char line[100];printf("\nDirect Generation of All Subsets of a set");printf("\n=========================================");printf("\n\nNumber of Element in the Given set -- > ");gets(line);n = atoi(line);for(i = 0;i < n;i++)digit[i] = '0';printf("\n{}");while(LOOP){for(i = 0;i < n && digit[i] == '1';digit[i] = '0',i++);if(i == n)break;elsedigit[i] = '1';for(i = 0;i < n && digit[i] == '0';i++);//for(j = n - 1;j >= 0;j--)//putchar(digit[j]);printf("\n{%d",i + 1);for(j = i + 1;j < n;j++)if(digit[j] == '1')printf(",%d",j + 1);printf("}");}}注释部分是我自己加的,打开之后大概可以更好理解吧。
另外还可以用unsigned long代替数组进行计算。
在这个程序里还学到的是一个二进制数+1的实质是什么:从右往左查,如果遇到的位数是1,就把它变成0,接着处理下一位,但是若遇到0,便把那个位数变成1,停止工作。
用这个关系就可以把数字计算转化成字符串的变化。
子集这个东西要输入的数最好少 一点,答案给的limit是20,但是我输入100为什么也正常运行呢(我想答案是虽然可以运行但是不可靠)?虽然很长时间没有算出结果。。。
- 《C语言名题精选百则----10》
- 《C语言名题精选百则----1》
- 《C语言名题精选百则----2》
- 《C语言名题精选百则----3》
- 《C语言名题精选百则----4》
- 《C语言名题精选百则----5》
- 《C语言名题精选百则----6》
- 《C语言名题精选百则----7》
- 《C语言名题精选百则----8》
- 《C语言名题精选百则----9》
- 《C语言名题精选百则----11》
- 《C语言名题精选百则----12》
- 《C语言名题精选百则----13》
- 《C语言名题精选百则----14》----查找长方形
- C语言名题精选百则——排列,组合与集合
- C语言名题精选百则:所有子集,字典子集,Gray子集
- C语言好帖精选
- 精选C语言学习网站
- 自行车独行成都~上海
- Jquery的parent,parents与children
- 第一个周日
- 随便说说java字符集和编码故事
- SQL SERVER 特殊需求的一个替换实例 --【叶子】
- 《C语言名题精选百则----10》
- 自行车独行成都~上海之 终结篇
- Git详解之五 分布式Git
- (译)如何让你的手机(智能机)游戏更受欢迎的43条小窍门
- 多重继承中二义性的消除
- 什么是云计算
- 2012, 每一个软件工程师必须做的11件事儿
- 云计算技术的产生、概念、原理、应用和前景
- hdu 3308 LCIS (线段树+单点更新+区间合并)