回 帖 发 新 帖 刷新版面

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

[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个回复)

沙发


[code]NOI’95 “同创杯”全国青少年信息学(计算机)奥林匹克竞赛
分区联赛复赛试题(高中组) 
(上机编程,完成时间:210分钟)
                [color=FF00FF] 编号为: gcc_2[/color][/code]

[quote]



1.编码问题:
   设有一个数组A:ARRAY[0..N-1] OF INTEGER;
    数组中存放的元素为0~N-1之间的整数,且A[i]≠A[j](当i≠j时)。
    
    例如:N=6时,有:             A=(4,3,0,5,1,2)
    此时,数组A的编码定义如下:
      A[0]的编码为0;
      A[i]的编码为:在A[0],A[1],…,A[i-1]中比A[i]的值小的个数(i=1,2,…,N-1)
    ∴ 上面数组A的编码为:    B=(0,0,0,3,1,2)
    
   程序要求解决以下问题:
①    给出数组A后,求出其编码。
②    给出数组A的编码后,求出A中的原数据。






2.灯的排列问题:
    设在一排上有N个格子(N≤20),若在格子中放置有不同颜色的灯,每种灯的个数记为N1,N2,……Nk(k表示不同颜色灯的个数)。
   
   放灯时要遵守下列规则:
①    同一种颜色的灯不能分开;
②    不同颜色的灯之间至少要有一个空位置。
   
   例如:N=8(格子数)
         R=2(红灯数)
         B=3(蓝灯数)
   
   放置的方法有:
       
       R-B顺序

R    R        B    B    B        
R    R            B    B    B    
R    R                B    B    B
    R    R        B    B    B    
    R    R            B    B    B
        R    R        B    B    B
    
        B-R顺序

B    B    B        R    R        
B    B    B            R    R    
B    B    B                R    R
    B    B    B        R    R    
    B    B    B            R    R
        B    B    B        R    R

    放置的总数为12种。

    数据输入的方式为:
N
P1(颜色,为一个字母) N1(灯的数量)
P2                     N2
   ……
Q(结束标记,Q本身不是灯的颜色)

    程序要求:求出一种顺序的排列方案及排列总数。





3. 设有一个四层的积木块,1~4层积木块的数量依次为:5,6,7,8
    如下图所示放置:
                        
                            
    8    15    8    5    16    9    14    
2    3    4    1    4    3    2    6

    其中,给出第三层与第四层所标示的数字,并已知第三层的数据是由第四层的数据计算出来的。
    计算的方法是:第三层的某个数据A是由第四层相邻的两个数据B,C经过某种计算后产生的:
    A    
B    C

    计算所用到的计算符为:+,-, ,且无优先级之分(自左向右计算),运算符最多为2个。
    如:3+4 5=35   5 4+3=23
    可以看出,上图中的第三层的数据是由第四层的数据用以下计算公式计算出来的:
A=B C+B
    也就是:8=2 3+2,15=3 4+3,……14=2 6+2
    程序要求:
    给出第四层与第三层的数据后,将第一、二层的每块积木标上相应的数据,并输出整个完整的积木图及计算公式。
①     输入数据不存在出错的情况,同时也不会超过整数的范围。
②     计算时可允许出现以下情况:
    A=B            (即可理解为运算符的个数为零)
    A=B B&not;&not;+B      (即全部由B产生)

[/quote]

板凳

      [code]NOI’95 “同创杯”全国青少年信息学(计算机)奥林匹克竞赛
分区联赛复赛试题(初中组)  
       (上机编程,完成时间:210分钟)
                      [color=FF00FF] 编号为: gcc_3[/color]
  [/code]
[quote]
1. 设有下列的算式:
          8 0 9
     -------------
□□)  □□□□
       □□
     -------------
         □□□
         □□□
     -------------
              1
    求出□中的数字,并打印出完整的算式来。

<2> 方阵填数:在一个N N的方阵中,填入1,2,……N N个数,并要求构成如下的格式:
例:










3. 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。
    例如:(13)10=(1101)2
        其中1的个数为3,0的个数为1,则称此数为A类数;
         (10)10=(1010)2
        其中1的个数为2,0的个数也为2,称此数为B类数;
         (24)10=(11000)2
        其中1的个数为2,0的个数为3,则称此数为B类数;
   程序要求:求出1~1000之中(包括1与1000),全部A、B两类数的个数。





4.编码问题:设有一个数组A:ARRAY[0..N-1] OF INTEGER;数组中存放的元素为0~N-1之间的整数,且A[i]≠A[j](当i≠j时)。
   例如:N=6时,有:                   A=(4,3,0,5,1,2)
       此时,数组A的编码定义如下:
       A[0]的编码为0;
       A[i]的编码为:在A[0],A[1],……A[i-1]中比A[i]的值小的个数(i=1,2……N-1)
    ∴上面数组A的编码为:                B=(0,0,0,3,1,2)
    程序要求解决以下问题:
①    给出数组A后,求出其编码;
②    给出数组A的编码后,求出A中的原数据。






5. 灯的排列问题:设在一排上有N个格子(N≤20),若在格子中放置有不同颜色的灯,每种灯的个数记为N1,N2,……Nk(k表示不同颜色灯的个数)。
   放灯时要遵守下列规则:
①    同一种颜色的灯不能分开;
②    不同颜色的灯之间至少要有一个空位置。
   例如:N=8(格子数)
         R=2(红灯数)
         B=3(蓝灯数)
   放置的方法有:
       R-B顺序
R    R        B    B    B        
R    R            B    B    B    
R    R                B    B    B
    R    R        B    B    B    
    R    R            B    B    B
        R    R        B    B    B
    
       B-R顺序
B    B    B        R    R        
B    B    B            R    R    
B    B    B                R    R
    B    B    B        R    R    
    B    B    B            R    R
        B    B    B        R    R
    放置的总数为12种。
    数据输入的方式为:
N
P1(颜色,为一个字母) N1(灯的数量)
P2                     N2
   ……
Q(结束标记,Q本身不是灯的颜色)

    程序要求:求出一种顺序的排列方案及排列总数。


[/quote]

3 楼

[code]


第三届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题      
           (初中组  竞赛用时:3小时)
               
              [color=FF00FF]  编号为: gcc_4 [/color]
[/code]
[quote]


1.设有一个n*m方格的棋盘(1≤m,n≤100)。(30%)
   求出该棋盘中包含多少个正方形、多少个长方形(不包括正方形)。
   
    例如:当n=2,m=3时
        
        

正方形的个数有8个;即边长为1的正方形有6个;
                      边长为2的正方形有2个。

长方形的个数有10个;
    即2*1的长方形有4个;

          1*2的长方形有3个;
          
          3*1的长方形有2个;
          
          3*2的长方形有1个。


程序要求:输入:n和m          输出:正方形的个数与长方形的个数

如上例:输入:2  3              输出:8,10





2.将1,2,&#8226;&#8226;&#8226;&#8226;&#8226;&#8226;,9共9个数排成下列形态的三角形。(30%)
                        a
                     b      c
                  d            e
                f     g     h     i
    
    其中:a~i分别表示1,2,&#8226;&#8226;&#8226;&#8226;&#8226;&#8226;,9中的一个数字,并要求同时满足下列条件:
    (1)a<f<i;
    (2)b<d, g<h, c<e
    (3)a+b+d+f=f+g+h+i=i+e+c+a=P
    
    程序要求:
      根据输入的边长之和P
      输出所有满足上述条件的三角形的个数以及其中的一种方案。
  





3.设有一个N*M(l≤ N≤50, l≤ M≤ 50)的街道(如下图):(40%) 
 




 
    
    规定行人从A(1,1)出发,在街道上只能向东或北方向行走。 
如下为N=3,M=3的街道图,从A出发到达B共有6条可供行走的路径:

       A6      A7      B(N,M)
 
       A3      A4      A5 

       A      A1      A2
    

若在N*M的街道中,设置一个矩形障碍区域(包括围住该区域的街道)不让行人通行,如图中用“*”表示的部分。

此矩形障碍区域用2对顶点坐标给出,前图中的2对顶点坐标为:(2,2),(8,4),此时从 A出发到达B的路径仅有两条。 

    程序要求:
       
    任务一:给出N,M后,求出所有从A出发到达B的路径的条数。 
   
    任务二:给出N,M,同时再给出此街道中的矩形障碍区域的2对顶点坐标(X1,y1), (X2,Y2),然后求出此种情况下所有从A出发到达B的路径的条数。 

[/quote]

4 楼


[code]第二届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题 
(初中组 竞赛用时:3小时)

              [color=FF00FF]    编号为:gcc_5[/color]
[/code]
[quote]
1.编制一个乘法运算的程序(20分)
   从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出。
   例如,输入格式:8913                     又如,输入格式:16  8
      
      输出格式:        89                        输出格式:    16
                     × 13                                  ×   8 
                       267                                     128
                       89  
                      1157

2.输入三个自然数N,i,j (1<=i<=N,1<=j<=N),输出在一个N*N格的棋盘中,与格子(i,j)同行、同列、同一对角线的所有格子的位置。(20分)
    
    如:n=4,i=2,j=3表示了棋盘中的第二行第三列的格子,如下图:
第1行
第2行
第3行
第4行
               第一列    第二列    第三列    第四列
            
        (2,3)    
            
            
    
          当n=4,i=2,j=3时,输出的结果是:
          (2,1) (2,2) (2,3) (2,4)             {同一行上格子的位置}
          (1,3) (2,3) (3,3) (4,3)            {同列列上格子的位置}
          (1,2) (2,3) (3,4)                     {左上到右下对角线上的格子的位置}
          (4,1) (3,2) (2,3) (1,4)               {左下到右上对角线上的格子的位置}

3.字符串编辑(30分)
   从键盘输入一个字符串(长度<=40个字符),并以字符 ’.’ 结束。
       例如:’This is a book.’ 现对该字符串进行编辑,编辑功能有:
   D:删除一个字符,命令的方式为:
       D  a  其中a为被删除的字符
   例如:D  s  表示删除字符 ’s’ ,若字符串中有多个 ‘s’,则删除第一次出现的。
         如上例中删除的结果为: ‘Thi is a book.’
I:插入一个字符,命令的格式为:
    I  a1  a2  其中a1表示插入到指定字符前面,a2表示将要插入的字符。
例如:I  s  d  表示在指定字符 ’s’ 的前面插入字符 ‘d’ ,若原串中有多个 ‘s’ ,则插入在最后一个字符的前面,如上例中:
    原  串:’This is a book.’
    插入后:’This ids a book.’

R:替换一个字符,命令格式为:
    R  a1  a2  其中a1为被替换的字符,a2为替换的字符,若在原串中有多个a1则应全部替换。
例如: 原 串: ‘This is a book.’
输入命令:R  o  e
    替换后的字符串为: ‘This is a beek.’

在编辑过程中,若出现被改的字符不存在时,则给出提示信息。
 

4.比赛安排(30分)
    设有有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             三天

[/quote]

5 楼

非常抱歉!此BBS 不支持DOC 文档格式!
会给阅读带来很多不便,所以我另求它法!
终于我把这些精典的题目转换成了网页格式:

具体试题对应的网址如下:
gcc-1 :
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_1_2007411193828.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_1_2007411193828.htm[/url]

gcc-2 :
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_2_2007411193835.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_2_2007411193835.htm[/url]

gcc-3 :
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_3_2007411193842.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_3_2007411193842.htm[/url]

gcc-4 :
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_4_2007411193848.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_4_2007411193848.htm[/url]

gcc-5 :
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_5_2007411193856.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_5_2007411193856.htm[/url]

gcc-6 :
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_6_200741119394.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_6_200741119394.htm[/url]

gcc-7 :
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_7_200741119397.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_7_200741119397.htm[/url]

gcc-8 :
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_8_2007411193913.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_8_2007411193913.htm[/url]

gcc-9 :
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_9_2007411193918.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_9_2007411193918.htm[/url]

gcc-10:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_10_2007411193926.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_10_2007411193926.htm[/url]

gcc-11:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_11_2007411193930.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_11_2007411193930.htm[/url]

gcc-12:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_12_2007411193935.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_12_2007411193935.htm[/url]

gcc-13:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_13_2007411193939.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_13_2007411193939.htm[/url]

gcc-14:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_14_2007411193945.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_14_2007411193945.htm[/url]

gcc-15:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_15_2007411193949.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_15_2007411193949.htm[/url]

gcc-16:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_16_2007411193954.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_16_2007411193954.htm[/url]

gcc-17:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_17_200741119402.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_17_200741119402.htm[/url]

gcc-18:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_18_200741119409.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_18_200741119409.htm[/url]

gcc-19:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_19_2007411194014.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_19_2007411194014.htm[/url]

gcc-20:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_20_2007411194019.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_20_2007411194019.htm[/url]

gcc-21:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_21_2007411194029.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_21_2007411194029.htm[/url]

gcc-22:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_22_2007411194034.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_22_2007411194034.htm[/url]

gcc-23:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_23_2007411194041.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_23_2007411194041.htm[/url]

gcc-24:
[url=http://acm.zjnu.cn/bbs/new/pic/gcc_24_2007411194047.htm]http://acm.zjnu.cn/bbs/new/pic/gcc_24_2007411194047.htm[/url]

6 楼

[fly]
[color=FF00FF]下面我给出一些题目的答案与大家交流:[/color]
[/fly]

7 楼


[color=FF00FF]GCC-13 题目的答案:(欢迎大家一起交流解法)[/color]

[code]
================NO.1数的计算==============
        #include <stdio.h>
        #include <time.h>
                                                 
                                               
        #define MAX 100001
                                                  
                                                 
        int main(int argc , char *argv )
        {
                int N , i;
                long a[MAX], b[MAX];
                //clock_t end, begin;
                                             
                                               
                scanf( "%d", &N );
                //begin= clock();
                for (i=1; i <= N ; i++ )
                {
                        b[i] = 1 + a[i>>1] ;
                        a[i] = a[i-1] + b[i];
                }
                                                
                                               
                printf("%ld\n",b[N]);
                //end = clock();
               /* printf("\nThe num of %d has run 
%f seconds !\n",N,(double)(end-begin)/1000);*/
                return 0;
        }

=========NO.2 最大公约数和最小公倍数问题=========
    #include <stdio.h>
    
    
    long find (long v)
    
    {
        long j,k=0;
        
        j= 2;

        while (v > 1)
        {
            for(; v % j != 0 ; )
            j++;
            k++;
            for(; v % j == 0 ;)
            v /= j;
        }

        return k ;
    }

    int main ()
    {
        long x0,y0;
        long i,num=0,v=0,total=0;
        
        scanf("%ld %ld",&x0, &y0);
        
        if (y0 % x0 != 0)
        {
            printf("0\n");
            return 0;
        }
    
        v = y0 / x0;
        
        if(v==1)
        {
        printf("1\n");
        return 0;
        }
        
        num = find (v);
        
        total = 1;
        
        for(i=1 ; i<=num ;i++)
        total *= 2;
        
        printf("%ld\n",total);
    
        return 0;
    }

[/code]

8 楼

[color=FF00FF]GCC-21 : 部分题目的答案给C新手参考![/color]

[code]
  ============== NO.1陶陶摘苹果===========
#include <stdio.h>
        #define MAX 101
                                  
        int main()
        {
                int apple[MAX],h,num=0;
                int i,j;
                for(i=1;i<=10;i++)
                scanf("%d",&apple[i]);
                scanf("%d",&h);
                h= h+30;
                for(j=1;j<=10;j++)
                if(h>=apple[j])
                num++;
                printf("%d\n",num);
                                    
                return 0;
    }

============ NO.2校门外的树============
         #include <stdio.h>
                               
        #define MAXV 10001
                             
        int main(int argc, char *argv)
                              
        {
                             
                           
                int a[MAXV] = {0,0,0};
                int L,M ;
                int i,j,k,l;
                int total=0;
                                     
                                             
                scanf("%d %d",&L,&M);
                                   
                for(i=0;i<M;i++)
                {
                        scanf("%d %d",&j,&k);
                                           
                                             
                        for(l=j ;l<=k ; l++)
                        a[l] = 1 ;
                }
                                               
                                         
                for(l=0 ; l<=L ;l++)
                if(a[l] == 0)
                total ++;
                                      
                printf("%d\n",total);
                                                
                                      
                return 0;
        }


============= NO.3采药==========
/* * *                 * * */
    /* * *    The problem of DP !    * * */
                

    #include <stdio.h>
    
    #define  MAX_NUM 101
    #define  MAX_TIME 1001
    
    int main ( int argc, char argv[] )
    
    {
        long m[MAX_NUM][MAX_TIME];    
        int t , v , time, n ;
        int i,j;
        long k;
        memset(m , 0 , sizeof(m) );
        
        scanf("%d %d",&time, &n);
        
        for(i=1; i<= n ; i++)
        {
            scanf("%d %d",&t, &v);
            for(j=1; j<= time; j++)
            {
                if(j >= t && (k = m[i-1][j-t]+v)> m[i-1][j])
                m[i][j] = k;
                else
                m[i][j] = m[i-1][j];
            }
        }
        
        printf("%ld\n",m[n][time]);
    }    


[/code]

9 楼


[color=FF00FF]GCC-23 题目的解答:(仅供参考)[/color]


[code]

=========No.1明明的随机数=========
#include <stdio.h>
    
    #define MAX 101
    
    int main(int argc,char *argv)
    {
    
        int a[MAX],b[MAX];
        int N,i,j,k,lb=0,flag,temp;
        
        scanf("%d",&N);
        for(i=1;i<=N;i++)
        scanf("%d",&a[i]);
        
        b[++lb] = a[1] ;
        
        for(i=2 ; i<= N; i++)
        {
            flag = 0;
            for(j=1 ; j<= lb; j++)
            if(a[i]== b[j])
            flag = 1;
            if(flag==0)
            b[++lb]= a[i];
        }
        
        for(k=1;k<lb; k++)
        for(j=k+1;j<=lb;j++)
        if(b[j]<b[k])
        {
        temp = b[j];
        b[j] = b[k];
        b[k] = temp;
        }
        
        printf("%d\n",lb);
    
        for(i=1;i<=lb;i++)
        printf("%d ",b[i]);
        printf("\n");
        
        return 0;
    }


==========NO.2开心的金明=========
#include <stdio.h>
    #define MAXV 30001
    
    int main()
    {
        int N,m,v,p ; 
        long a[MAXV];     
        int i,j,k;     
    
        memset(a, 0 , sizeof(a) );
        
        scanf("%d %d",&N, &m);
        
        for(i=1 ; i<= m ;i++)
        {
            scanf("%d %d",&v,&p);
            
            for(j=N-v ; j>=0 ;j--)
            if(a[j+v] < (k=a[j]+v*p) )
            a[j+v] = k;
        }
        
        printf("%ld\n",a[N]);
        
        return 0;
    }
            
[/code]

10 楼

[code]
========NO.3Jam的计数法=========
#include <stdio.h>
    #include <memory.h>

    #define MAX 101 
    
    int w[MAX];
    int st,ed,we ,num=0;
    
    int compute ( int data, int n)
    {
        int i,j;
        if(num == 5)
        return 0;
        if(n == we)
        {
        for(j=1;j<=we;j++)
        printf("%c",w[j]+96);
        printf("\n");
        num ++;
        }
        for( i = data+1; i <= ed-we+n+1 && n <we  ; i ++)
        {
            w[n+1] = i;
            compute(i , n+1);
        }
        
    }
    
    
    int main()
    {
        int i,j,k;
        char c;
        int s[MAX];
        memset(s,0,sizeof(s));
        memset(w,0,sizeof(w));
        scanf("%d %d %d",&st,&ed,&we);
        getchar();
        for(i=1; i<=we ;i++)
        {
        scanf("%c",&c);
        w[i] = c-96 ;
        }
        
        memcpy(&s[1],&w[1],sizeof(int)*we);
         
        for(i=we; i>=1 ; i--)
        if( (s[i] <= s[i+1]-1 && i < we) || (s[i]< ed && i== we ))
            {
            
            for(k=s[i]+1; k <= ed-we+i ;k++)
                {
                w[i] = k ;
                compute(k ,i);
                }
            }
        
        return 0;
    }

===========NO.4数列=============
/* * *                * * */
    /* * *    sulie: mi sum        * * */
    /* * *  write zhxdong 1,4,2007    * * */
    
    #include <stdio.h>
    #include <math.h>
    
    #define MAX 10001
    
    long my_pow (int x , int y)
    
    {
        int h;
        long result=1 ;
        if( y == 0 ) 
        return 1;
        
        for(h = 1;h <= y ; h++)
        result *= x ;
        
        return result;
    }
        
    
    
    int main()
    {
        long a[MAX], la=0,temp;
        int k, N ;
        int i,j,index=0;
        
        scanf("%d %d",&k, &N);
        
        a[++index] = 1;

        for(i=1 ; index < N ; i++)
        {
            la = index ;

            temp = my_pow(k,i);
            a[++index]= temp ;
            
            for(j = 1 ; j <= la ; j++)
            {
            a[++index] = temp + a[j] ;
            if(index == N )
            goto end;
            }
        }
    
        end:
        printf("%ld\n",a[N]);
        
        return 0;
    }


[/code]

我来回复

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