主题:[原创][讨论][交流]编程高手的超级训练题解析
vcacm
[专家分:1500] 发布于 2007-04-11 17:29:00
[code]
[[color=FF0000]注意: 这儿绝大部分的题目来源于信息学竞赛!
这些题目都是非常好的!如果大家能把这些题目做出来,那么可以说你
的编程能力达到了一定的水平!
关于这些题目的答案在GOOGLE/BAIDU上都能搜出来,但我:希望大家积极参 与讨论, 如果你把当中的题目做出来了可以贴出来,不过最好是要讲清自己的解题思路!
我也会把自己做出来了的题目以及解题思路发上来和大家一起交流!
如果你想学好编程,那么实践是很重要的!
我也是一个编程爱好者![/color]
[color=FF00FF] My dream is to
develop a better than Linux, Windows more popular than the OS! [/color]
有啥问题,可以联系本人: 见我的签名档!
]
第二届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题
(高中组 竞赛用时:3小时)
[color=FF00FF] 编号为: gcc_1[/color]
[/code]
[quote]
1.比赛安排(20分)
设有有2 n(n<=6)个球队进行单循环比赛,计划在2 n ? 1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2 n ? 1天内每个队都与不同的对手比赛。
例如n=2时的比赛安排:
队 1 2 3 4
比赛 1==2 3==4 一天
1==3 2==4 二天
1==4 2==3 三天
2.数制转换(20分)
设有一个字符串A$的结构为: A$=’m<n>p’
其中m为数字串(长度<=20),而n,p均为1或2位的数字串(其中所表达的内容在2-10之间)。
程序要求:从键盘上读入A$后(不用正确性检查),将A$中的数字串m(n进制),以p进制的形式输出。
例如:A$=’48<10>8’
其意义为:将10进制数48,转换成8进制数输出。
输出结果为:48<10>=60<8>
3.挖地雷(30分)
在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径。
V1 V 2 V3 V4 V5
例如:
[题目要求]
当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后可以沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使某人能挖到最多的地雷。
输入格式: N: (表示地窖的个数)
W1,W2,W3,……WN (表示每个地窖中埋藏的地雷数量)
A12…………… . A1N
A23…………..A2N
……..
AN-1 N
输出格式:
K1--K2--……….KV (挖地雷的顺序)
MAX (挖地雷的数量)
例如:
⑩--------⑧ ④-----⑦-------⑥
其输入格式为: 输出:
5 1 ?3 -4 -5
10,8,4,7,6 max=27
1 1 1 0
0 0 0
1 1
1
4.砝码称重(30分)
设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重<=1000),
要求:
输入方式:a1 a2 a3 a4 a5 a6
(表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个)
输出方式:Total=N
(N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)
如输入:1_1_0_0_0_0 (注:下划线表示空格)
输出:TOTAL=3 表示可以称出1g,2g,3g三种不同的重量。
[/quote]
最后更新于:2007-04-17 06:46:00
回复列表 (共83个回复)
21 楼
vcacm [专家分:1500] 发布于 2007-04-12 07:32:00
[quote]呵呵 lz的头像不错啊,Fvwm~~~[/quote]
[code]
[color=FFAFF]
There are much fvwm in :http://www.fvwm.org!
you can go to download some !
[/color]
[/code]
22 楼
chc05 [专家分:540] 发布于 2007-04-12 09:42:00
内容丰富
23 楼
ghbxx2004 [专家分:610] 发布于 2007-04-12 10:17:00
这个和C有什么关系啊,只是算法题吗,我天天在做的类型
24 楼
shena995800 [专家分:170] 发布于 2007-04-12 16:03:00
gcc-6 gcc-14 gcc-15 gcc-16 gcc-17 gcc-18 gcc-24有图片显示不起~~请更新下~谢谢
谢谢楼主提供这么多题目~~谢谢了~~
25 楼
vcacm [专家分:1500] 发布于 2007-04-12 18:43:00
[quote]这个和C有什么关系啊,只是算法题吗,我天天在做的类型[/quote]
[code]
[color=FFFFOO]
LZ参加个OI吧!
你看过<<The art of compute program>> by knuth !
所以说写程序就是练习算法!
什么是算法?
[/color]
[/code]
26 楼
vcacm [专家分:1500] 发布于 2007-04-12 18:45:00
[quote]gcc-6 gcc-14 gcc-15 gcc-16 gcc-17 gcc-18 gcc-24有图片显示不起~~请更新下~谢谢
谢谢楼主提供这么多题目~~谢谢了~~[/quote]
[color=AFFOOF]
多试几次!!!
这个论坛的文档兼容性不是很好!
[/color]
27 楼
shena995800 [专家分:170] 发布于 2007-04-12 20:42:00
gcc-17:
http://acm.zjnu.cn/bbs/new/pic/gcc_17_200741119402.htm
我是点的你发的网址啊...一直都是叉叉...刷新好多次都不行
28 楼
vcacm [专家分:1500] 发布于 2007-04-12 21:48:00
[quote]gcc-17:
http://acm.zjnu.cn/bbs/new/pic/gcc_17_200741119402.htm
我是点的你发的网址啊...一直都是叉叉...刷新好多次都不行[/quote]
[code]
现在在线吗?
你可以到这去下载:
[/code][url=http://www.oifans.cn]oifans[/url]
29 楼
bistoury [专家分:10] 发布于 2007-04-13 09:10:00
经典,在做呢。。。。。
30 楼
vcacm [专家分:1500] 发布于 2007-04-13 10:33:00
[color=FFFFF]GCC-4 ; 部分答案(仅供参考)(gcc-4-3 must watch how to input!)
[/color]
[code]
===================gcc-4-1====================
/* * * namr:gcc-4-1 * * *
* * * chenfa_yusuan * * */
#include <stdio.h>
//#define MAX_NUM 5
int main(int argc, char *argv[] )
{
int n1,n2 ;
int i, j, k ;
char *s= "______" ;
scanf("%d %d", &n1, &n2);
if(n1 <10 || n2 <10 )
{
printf("%5d\nx%4d\n%s\n%5d\n",n1,n2,s, n1*n2 );
}
else
{
k= n1 * (n2 % 10);
j= n1 * (n2 / 10);
printf("%5d\nx%4d\n%s\n%5d\n%4d\n%s\n%5d\n",n1,n2,s,k,j,s,n1*n2);
}
return 0 ;
}
===================gcc-4-2============================
/* * * name : gcc-4-2.c * * *
* * * find (x,y) * * */
#include <stdio.h>
#define MAX 101
int main (int argc, char *argv[])
{
int m [ MAX ][ MAX ] ;
int N , i, j ;
int h,k,l ;
scanf("%d %d %d", &N , &i , &j );
/* find the row */
for(h=1 ; h<=N ;h++)
printf("(%d , %d ) ",i , h );
printf("\n");
/* find the low*/
for(h=1 ; h<=N ;h++)
printf("(%d , %d ) ",h , j );
printf("\n");
/*find left-up to right-down */
h= i ;
k= j ;
while ( h>1 && k > 1)
{
h-- ;
k-- ;
}
while ( h<=N && k <= N )
{
printf("(%d , %d ) ",h , k );
h ++ ;
k ++ ;
}
printf("\n");
/*find left-down to right-up */
h = i ;
k = j ;
while ( h< N && k > 1)
{
h ++ ;
k -- ;
}
while( h>=1 && k<= N )
{
printf("(%d , %d ) ",h , k );
h -- ;
k ++ ;
}
printf("\n");
return 0 ;
}
[/code]
我来回复