12 2012 档案

摘要:/*计算二进制数转化为十进制数的结果*/样例输入:11111111111111111111111111111111111111111111111样例输出:1271099511627775这里使用了预处理,计算起来方便,直观。 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int s[110][110]={1};int p,q; 6 for(p=1;p<=100;p++){ 7 int c=0; 8 for(q=0;q<=p;q++) 9 {int w=2*s... 阅读全文
posted @ 2012-12-29 10:06 再见~雨泉 阅读(995) 评论(1) 推荐(1)
摘要:问题描述有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。输入数据包括多个数据集合。每个数据集合的第一行是两个整数W 和H,分别表示x 方向和y 方向瓷砖的数量。W 和H 都不超过20。... 阅读全文
posted @ 2012-12-28 23:43 再见~雨泉 阅读(415) 评论(2) 推荐(0)
摘要:问题描述鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1)。有经验的多多一眼就能看出,每棵花生植株下的花生有多少。为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。”我们假定多多在每个单位时间内,可以做下列四件事情中的一件:1) 从路边跳到最靠近路边(即 阅读全文
posted @ 2012-12-28 23:19 再见~雨泉 阅读(480) 评论(0) 推荐(0)
摘要:问题描述6*9 = 42 对于十进制来说是错误的,但是对于13 进制来说是正确的。即, 6(13) * 9(13) =42(13), 而 42(13) = 4 * 131 + 2 * 130 = 54(10)。 你的任务是写一段程序读入三个整数p、q和 r,然后确定一个进制 B(2<=B<=16) 使得 p * q = r. 如果 B 有很多选择, 输出最小的一个。例如: p = 11, q = 11, r = 121. 则有 11(3) * 11(3) = 121(3) 因为 11(3) = 1 * 31 + 1 * 30 =4(10) 和 121(3) = 1 * 32 + 2 阅读全文
posted @ 2012-12-28 22:44 再见~雨泉 阅读(636) 评论(0) 推荐(0)
摘要:问题描述一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6. 这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们 阅读全文
posted @ 2012-12-28 21:55 再见~雨泉 阅读(349) 评论(0) 推荐(1)
摘要:问题描述国际象棋的棋盘是黑白相间的 8 * 8 的方格,棋子放在格子中间。如图3-1 所示:王、后、车、象的走子规则如下: 王:横、直、斜都可以走,但每步限走一格。 后:横、直、斜都可以走,每步格数不受限制。 车:横、竖均可以走,不能斜走,格数不限。 象:只能斜走,格数不限。写一个程序,给定起始位置和目标位置,计算王、后、车、象从起始位置走到目标位置所需的最少步数。85输入数据第一行是测试数据的组数t(0 <= t <= 20)。以下每行是一组测试数据,每组包括棋盘上的两个位置,第一个是起始位置,第二个是目标位置。位置用"字母-数字"的形式表示,字母从& 阅读全文
posted @ 2012-12-28 21:47 再见~雨泉 阅读(2007) 评论(0) 推荐(0)
摘要:链接http://acm.hdu.edu.cn/showproblem.php?pid=2050本题目的关键在于从直线类推到折线,两条直线比一条折线多分两个部分,而n条折线则比2n条直线少2n个部分 1 #include<stdio.h> 2 __int64 a[10003]={1,4}; 3 void f() 4 { 5 int i; 6 for(i=2;i<10003;i++) 7 a[i]=a[i-1]+4*i-1; 8 } 9 int main()10 {11 f();int n;12 scanf("%d",&n);13 int ... 阅读全文
posted @ 2012-12-27 21:05 再见~雨泉 阅读(177) 评论(0) 推荐(0)
摘要:ACM队不是为了一场比赛而存在的,为的是队员的整体提高。大学期间,ACM队队员必须要学好的课程有:l C/C++两种语言l 高等数学l 线性代数l 数据结构l 离散数学l 数据库原理l 操作系统原理l 计算机组成原理l 人工智能l 编译原理l 算法设计与分析除此之外,我希望你们能掌握一些其它的知识,因为知识都是相互联系,触类旁通的。以下学习计划每学期中的内容不分先后顺序,虽说是为立志于学习ACM的同学列的知识清单,但内容不限于ACM的知识。英语之类与专业相距较远的课程请自行分配时间,这里不再列举。大一上学期:必学:2. 简单数学题(推荐“数学”分类20道以上)需要掌握以下基本算法:a) 欧几里 阅读全文
posted @ 2012-12-27 20:46 再见~雨泉 阅读(398) 评论(0) 推荐(0)
摘要:题目链接http://openoj.awaysoft.com/JudgeOnline/problem.php?id=2010如果直接循环判断,无疑必定超时,所以此题的关键就是进行预处理操作,代码如下: 1 #include<stdio.h> 2 #include<math.h> 3 bool p[1000001]; 4 long long q[1000001]; //VC中用__int64定义 , %I64d 输出 5 void prime() //预处理 6 { 7 long long i,j; 8 p[1]=1; 9 for(i=2;i<1... 阅读全文
posted @ 2012-12-27 20:37 再见~雨泉 阅读(213) 评论(0) 推荐(0)
摘要:输入n个元素组成的序列S,你需要找出一个最大乘积的连续子序列。如果不是正数,输出-1,表示无解。1=<n=<18,-10=<Si=<10。样例输入:32 4 -352 5 -1 2 -1样例输出:820#include<stdio.h>int main(){ int n; while(~scanf("%d",&n)) { int s[20]; for(int i=0;i<n;i++)scanf("%d",&s[i]); __int64 ji[400],max=-100000;int t=0; me 阅读全文
posted @ 2012-12-27 17:23 再见~雨泉 阅读(232) 评论(0) 推荐(0)
摘要:链接http://acm.hdu.edu.cn/showproblem.php?pid=2048#include<stdio.h>__int64 fact(int n){ if(n==1)return n; return (__int64)n*fact(n-1);}int main(){ __int64 f[20]={0,0,1},t; for(t=3;t<=20;t++) f[t]=(t-1)*(f[t-1]+f[t-2]); int n;while(~scanf("%d",&n)) { int i;int m; ... 阅读全文
posted @ 2012-12-27 16:32 再见~雨泉 阅读(161) 评论(0) 推荐(0)
摘要:链接http://acm.hdu.edu.cn/showproblem.php?pid=2047#include<stdio.h>__int64 a[40]={1,3};void f(){ int i; for(i=2;i<=40;i++) a[i]=2*(a[i-1]+a[i-2]);}int main(){ f(); int n; while(~scanf("%d",&n)) printf("%I64d\n",a[n]); return 0;} 阅读全文
posted @ 2012-12-27 16:31 再见~雨泉 阅读(132) 评论(0) 推荐(0)
摘要:链接http://acm.hdu.edu.cn/showproblem.php?pid=2046#include<stdio.h>int main(){ int a,b,n; __int64 s[100]; while(scanf("%d",&a)!=EOF) { s[1]=1; s[2]=2; for(n=3;n<=a;n++) { s[n]=s[n-1]+s[n-2]; } if(a==1||a==2) printf("%d\n",a); ... 阅读全文
posted @ 2012-12-27 16:30 再见~雨泉 阅读(119) 评论(0) 推荐(0)
摘要:链接http://acm.hdu.edu.cn/showproblem.php?pid=2045#include<stdio.h>int main(){ int n,i; __int64 a[51];a[1]=3;a[2]=6;a[3]=6; while(scanf("%d",&n)!=EOF) { for(i=4;i<=n;i++) a[i]=2*a[i-2]+a[i-1]; printf("%I64d\n",a[n]); } return 0;} 阅读全文
posted @ 2012-12-27 16:29 再见~雨泉 阅读(165) 评论(0) 推荐(0)
摘要:题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2044#include<stdio.h>__int64 a[50]={1,1};void f(){ int i; for(i=2;i<50;i++) a[i]=a[i-1]+a[i-2];}int main(){ f();int n; while(~scanf("%d",&n)){ int i;int x,b; for(i=0;i<n;i++){ scanf("%d%d",&x,&b); pr... 阅读全文
posted @ 2012-12-27 16:28 再见~雨泉 阅读(125) 评论(0) 推荐(0)
摘要:输入正整数n,按从小到大输出所有形如abcde/fghij=n的表达式。其中a~j为0~9的一个排列,2=<n=<79.样例输入:62样例输出:79546/01283=6294736/01528=62(代码有些累赘。。。)#include<stdio.h>#include<string.h>int main(){ int n; while(~scanf("%d",&n)) { int a,b,c,d,e; for(a=0;a<=9;a++) for(b=0;b<=9;b++) for(c=0;c<... 阅读全文
posted @ 2012-12-27 16:16 再见~雨泉 阅读(550) 评论(0) 推荐(0)
摘要:每辆火车都从A方向驶入车站,再从B方向驶出车站,同时它的车厢可以进行某种形式的重新组合。假设从A方向驶来的火车有n节车厢(n<1000),分别按顺序编号为1,2,...,n。假定在进入车站之前每节车厢之间都是不连着的,并且它们可以自行移动,直到处在B方向的铁轨上。另外假定车站C里可以停放任意多节的车厢。但是一旦当一节车厢进入车站C,它就不能再回到A方向的铁轨上了,并且一旦当它进入B方向的铁轨后,它就不能再回到车站C。负责车厢调度的工作人员需要知道能否使它以a1,a2,...,an的顺序从B方向驶出。 请写一个程序,用来判断能否得到指定的车厢顺序。【输入格式】 输入由两行组成:第一行有n( 阅读全文
posted @ 2012-12-27 15:33 再见~雨泉 阅读(381) 评论(0) 推荐(0)
摘要:输入m,n表示m*n的迷宫,接下来m*n行表示迷宫,用1表示路,0表示墙。输出左上角到右上角最少步数及走法.输入:5 51 0 1 1 11 0 1 0 11010 11111 11 0 0 1 1输出:minimum steps:8<0,0><1,0><2,0><3,0><3,1><3,2><2,2><1,2><0,2><0,3><0,4>核心在于BFS在走迷宫时,其重要在于一层一层走并记录每层的最短距离下面用dist[x][y]表示,而x*n+y就是标号[x] 阅读全文
posted @ 2012-12-27 13:34 再见~雨泉 阅读(274) 评论(0) 推荐(0)
摘要:两个不超过100位的大数相加输入:11111111111111111111111111111111111111111111111111111111111111111111111111111111输出:2222222222222222222222222222222222222222#include<stdio.h> #include<string.h> int main() { char a[100]={'0'},b[100]={'0'}; while(~scanf("%s%s",a,b)) { int i; int l 阅读全文
posted @ 2012-12-27 13:27 再见~雨泉 阅读(197) 评论(0) 推荐(0)
摘要:输入n表示盘子的个数,只能小的在上,大的在下,求将第一个移到第三个的移法#include <stdio.h> int main() { void hanoi(int n,char one,char two,char three); // 对hanoi函数的声明 int m; printf("input the number of diskes:"); scanf("%d",&m); printf("The step to move %d diskes:\n",m); hanoi(m,'A',' 阅读全文
posted @ 2012-12-27 13:25 再见~雨泉 阅读(153) 评论(0) 推荐(0)
摘要:输入n,表示边数,接着逆时针输入坐标,球多边形面积(注意多边形凹凸性!!!)#include<stdio.h> int main( ) { int n; while(scanf("%d",&n) && n) { int i; float a[100][2],s=0; scanf("%f %f",&a[0][0],&a[0][1]); for(i=1;i<n;i++) { scanf("%f %f",&a[i][0],&a[i][1]); ... 阅读全文
posted @ 2012-12-27 13:23 再见~雨泉 阅读(230) 评论(0) 推荐(0)
摘要:输入两个不超过200位的大数,输出它们的积输入样例1234567890098765432100输出样例1219326311126352690000在下面的例子程序中,用 a[220]和b[220]分别存放两个乘数,用z[440]来存放积。计算的中间结果也都存在z中。aResult 长度取400 是因为两个200 位的数相乘,积最多会有400 位。a[0], b[0], z[0]都表示个位。计算的过程基本上和小学生列竖式做乘法相同。为编程方便,并不急于处理进位,而将进位问题留待最后统一处理。现以 835×49 为例来说明程序的计算过程。147先算835×9。5×9 阅读全文
posted @ 2012-12-27 13:21 再见~雨泉 阅读(256) 评论(0) 推荐(0)