原文地址:http://www.cnblogs.com/CheeseZH/archive/2012/04/07/2436242.html
【有错误大家尽管提哈~感谢Muse牧马指正第1、9题,松鼠123指正第3题,神@雕指正第5题】
1:
假设有两种微生物 X 和 Y X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。 一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。 现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。 如果X=10,Y=90 呢? 本题的要求就是写出这两种初始条件下,60分钟后Y的数目。 题目的结果令你震惊吗?这不是简单的数字游戏!真实的生物圈有着同样脆弱的性质!也许因为你消灭的那只 Y 就是最终导致 Y 种群灭绝的最后一根稻草!//Muse牧马 指证这道题的答案是错的并给出了代码。我理解错了题意,误以为是“兔子繁殖”了。。。。
X=10 Y=89 : 物种Y会灭绝,所以是0(算出来是一个负数)X=10 Y=90 : 60min后物种Y最终数量是:94371840(期间Y不可能出现负数)
//代码:
#include <cstdio> int main() { long int X=10, Y=90; for(int k=1; k<=120; k++)//半分钟一个单位 { if(k%2==1)Y -= X;//因为X出生半分钟后就要吃Y,尔后没1分钟要吃Y,所以永远都是奇数个半分钟的时候吃Y,又因为此时X不会增长(题目为了减小讨论的复杂度),所以直接减X数量即可。 if(k%4==0)Y *= 2;//每2分钟翻倍 if(k%6==0)X *= 2;//每3分钟翻倍,X和Y的翻倍是相互独立的,不需要另作讨论。 } printf("%d", Y); return 0; }
2:
ABCDE * ? = EDCBA “ABCDE代表不同的数字,问号也代表某个数字!"
21978
//5层循环就OK了
3:
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。 等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......” 请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。 如果有多个可能的答案,请列出所有答案,每个答案占一行。 格式是:人数,人数,... 例如,有一种可能是:20,5,4,2,0
//松鼠123 告诉我这道题的答案要严格递减的,所以我删掉了不符合要求的组合。
20 5 4 2 018 9 3 2 015 10 3 2 0
12 6 4 2 0
//先求处4个数【严格递减的,4层循环就OK】的最小公倍数,然后求倒数和是否为1
4:
某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪: 每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。 每位选手都有一个起步的分数为10分。 某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗? 如果把答对的记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是可能的情况。 你的任务是算出所有可能情况。每个答案占一行。
101101000001110100000010110011
//赢或不赢,只有10道题,递归去吧。
5:
顺时针转置矩阵
sizeof(int)*rank*rankrank-1-i/rank+rank*(i%rank)//经 神@雕 指正。我写的4而不是rank。应该是rank才对。
void rotate(int* x, int rank) {int* y = (int*)malloc(___________________); // 填空 for(int i=0; i<rank * rank; i++) { y[_________________________] = x[i]; // 填空 } for(i=0; i<rank*rank; i++) { x[i] = y[i]; } free(y);}int main(int argc, char* argv[]) {int x[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; int rank = 4; rotate(&x[0][0], rank); for(int i=0; i<rank; i++) {for(int j=0; j<rank; j++) { printf("M", x[i][j]); } printf("\n"); }return 0; }6:
大数乘法
n3/base+n2/base+n4