摘要: 解题报告:求 斐波那契数,不过这题的n的范围是1000,肯定是早就超过了的,所以要用到高精度,所以这题其实就是一个加法高精度的题。我的做法 是写一个大数相加的函数,然后打表就是了,这里注意的就是每次做了大数相加之后任然保留倒序的数存在表里面,这样以便下次相加的时候直接加,而不用把顺序翻来翻去很麻烦,这样只要在输出的时候把顺序倒过来就可以 了。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn = 1000+4; 6 char ans[1003][1000]; 7 char* add(const ch 阅读全文
posted @ 2013-08-13 22:52 xiaxiaosheng 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 解题报告:给出四个数,然后要你把这四个数组合成的各不相同的四位数按照从小到大的顺序输出来,然后如果最高位是0的话不能输出来,还有最高位是数字如果一样的话,则放在同一行输出。本来是个比较简单的生成全排列的题,并且个数都固定了,但是这题的特点就是输入的四个数中,并不是各不相同的四个数,所以我们在得到结果... 阅读全文
posted @ 2013-08-13 22:31 xiaxiaosheng 阅读(356) 评论(0) 推荐(0) 编辑
摘要: 解题报告:这题就用一个进制转换的函数就可以了,不需要转换成相应的进制数,只要求出相应进制的数的各位的和就可以了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int trans(int x,int r) { 8 int sum = 0; 9 while(x) {10 sum += x%r;11 x/=r;12 }13 return sum;14 }15 16 int main() {17 int n;18 ... 阅读全文
posted @ 2013-08-13 16:26 xiaxiaosheng 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 解题报告:在汉诺塔的基础上,规定,第一根柱子上的盘不能直接移动到第三根柱子,就是说只能从第二根柱子移出,或者移到第二根柱子,然后规定只有最大的盘子可以放在最小的盘子上,要求将n个盘子从第一根柱子移动到第三根柱子,问最少需要多少步?还是一样dp,只不过这题的一个特别之处就是三根柱子的性质不完全一样,所以在dp第一根柱子移到第三根柱子的时候不能直接用dp[n-1],因为如果把n个盘子从第一根柱子移到第二根柱子跟移到第三个柱子的次数是不一样的,然后我们可以发现,移到第二根柱子或者从第二根柱子移动到其它两根柱子的性质是一样的,所以我们可以先打一个表,即1-n个盘子从第一根柱子到第二根柱子的最少次数。然 阅读全文
posted @ 2013-08-13 16:12 xiaxiaosheng 阅读(507) 评论(0) 推荐(0) 编辑
摘要: 解题报告:有一群人在打乒乓球比赛,需要在这一群人里面选出一个冠军,现在规定,若a赢了b,b又赢了c那么如果a与c没有比赛的话,就默认a赢了c,而如果c赢了a的话,则这三个人里面选不出冠军,还有就是如果一个人没有输给别人,但是存在一个人跟这个人之间的输赢关系不能确定的话,也是作为选不出冠军的情况,现在输入一群人的比赛情况,要你确定,利用这组比赛情况能不能确定一个冠军,能的话输出Yes,否则输出No。感觉这题应该有很多种不同的解法,其中由于输入的是选手的名字,所以还要用到map容器。我的做法是枚举每一个人是否有可能是冠军,即从这个人开始出发,用dfs搜索,看这个人一共赢了多少个人,然后他赢的人的个 阅读全文
posted @ 2013-08-13 15:33 xiaxiaosheng 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 解题报告:一个字符串的题,最恶心的还是格式问题,PE了很多次,要求是每个测试数据的后面都带有一个空行,但是最后一个不能有空行,所以只能把第一组数据的前面不输出空行,而后面的每一组数据都输出空行,这样达到的效果跟理想的是一样的。 1 #include 2 #include 3 char map[100][100]; 4 int main() { 5 int n,f = 0; 6 char A[3]; 7 while(scanf("%d %c %c",&n,&A[0],&A[1])!=EOF) { 8 if(f) printf("\n" 阅读全文
posted @ 2013-08-13 10:24 xiaxiaosheng 阅读(248) 评论(0) 推荐(0) 编辑