回 帖 发 新 帖 刷新版面

主题:[原创][讨论][交流]编程高手的超级训练题解析

[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]

  

回复列表 (共83个回复)

81 楼


 编号为: gcc_3的做法能告诉我么?特别是第2题 那个总数是怎末求的呀?[code=c]
请填写代码
[/code]

82 楼

楼主好强

83 楼

gcc-5 NO.3   供参考
#include<iostream>
#include<cstring>
using namespace std;
void delchar(char a,char b[40])
{
  int i,j,k;
  j=strlen(b);
   for(i=0;i<j;i++)
   {
       if(b[i]==a)
           break;
   }
   if(i==j)
       cout<<a<<"is not found!"<<endl;
   else
   {
        for(k=i+1;k<j;k++)
             b[k-1]=b[k];
             b[k-1]='\0';
        cout<<b<<endl;
   }
}
void inschar(char a,char c,char b[40])
{
    int i,j,k;
    j=strlen(b);
      for(i=j-1;i>=0;i--)
   {
       if(b[i]==a)
           break;
   }
      if(i==-1)
       cout<<a<<"is not found!"<<endl;
   else
   {
        for(k=j-1;k>=i;k--)
             b[k+1]=b[k];
             b[i]=c;
             b[j+1]='\0';
        cout<<b<<endl;
   }

void repchar(char a,char c,char b[40])
{
    int i,j,flag=0;
    j=strlen(b);
      for(i=0;i<j;i++)
          if(b[i]==a)
          {
              b[i]=c;
              flag=1;
          }
          if(flag==0)
              cout<<a<<"is not found!"<<endl;
          else 
              cout<<b<<endl;
}
int main()
{
    char str[40],l,n;
    cout<<"Input a string ended as symbol \".\""<<endl;
    cin.getline(str,40);
    cout<<str<<endl;
    cin>>l>>n;
    delchar(l,str);
    inschar(l,n,str);
    repchar(l,n,str);
    return 0;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册