zoukankan      html  css  js  c++  java
  • 12/10 C语言程序设计竞赛 后五题

    Title(题目)

    小朋友顺逆报数

    Problem ID(题目编号)

    (题目添加成功后由系统自动生成)

    Time Limit(运行时间限制)

    S(秒)

    Memory Limit(内存限制)

    MByte(兆)

    Description(题目描述):

    编号为1,2,…,n的n位小朋友依次排成一列,从1号开始1,2,…,m报数, 凡报到m者出列, 直至报数到队列尾部。此后, 又从队列尾部开始反向1,2,…,m报数, 凡报到m者同样出列。这样反复顺逆报数, 直至队列剩下m-1个小朋友为止。问:最后未出列的m-1位小朋友编号为多少?第p个出列的是哪位小朋友?

    Input(输入描述):

    输入n,m,p (1<=m<=20, m<=n<=500, 1<=p<=n-m+1)

    Output(输出描述):

    输出未出列的m-1位小朋友的编号

    输出第p位出列的小朋友编号

    Sample Input(输入样例):

    100,3,50

    Sample Output(输出样例):

    4 77

    25

    Test Input(输入测试数据):

    480,9,89

    Test Output(输出测试数据):

    6 49 78 184 265 376 413 475

    116

    Hint(提示信息):

    Source(来源信息):

    Code(测试代码):(要求用C语言)

     1 #include<stdio.h>
     2 
     3 int main()
     4 
     5 {
     6 
     7        int ln,x,t,s,i,n,m,p;
     8 
     9        static int a[501];
    10 
    11        scanf("%d,%d,%d",&n,&m,&p);
    12 
    13        for(i=1;i<=n;i++) a[i]=1;
    14 
    15        ln=0;x=0;t=0;
    16 
    17        while(1)
    18 
    19        {
    20 
    21               for(s=0,i=1;i<=n;i++)
    22 
    23               {
    24 
    25                      s=s+a[i];
    26 
    27                      if(s==m) {a[i]=0;s=0;ln++;}
    28 
    29                      if(ln==p&&x==0) x=i;
    30 
    31                      if(ln==n-m+1) {t=1;break;}
    32 
    33               }
    34 
    35               if(t==1) break;
    36 
    37               for(s=0,i=n;i>=1;i--)
    38 
    39               {
    40 
    41                      s=s+a[i];
    42 
    43                      if(s==m) {a[i]=0;s=0;ln++;}
    44 
    45                      if(ln==p&&x==0) x=i;
    46 
    47                      if(ln==n-m+1) {t=1; break;}
    48 
    49               }
    50 
    51               if(t==1) break;
    52 
    53        }
    54 
    55        for(i=1;i<=n;i++)
    56 
    57               if(a[i]!=0) printf("%d ",i);
    58 
    59        printf("
    ");
    60 
    61        printf("%d
    ",x);
    62 
    63       
    64 
    65        return 0;
    66 
    67 }

    Title(题目)

    删除中的最值问题

    Problem ID(题目编号)

    (题目添加成功后由系统自动生成)

    Time Limit(运行时间限制)

    S(秒)

    Memory Limit(内存限制)

    MByte(兆)

    Description(题目描述):

    有一个很大的正整数n(位数不大于100),删除其中的s个数字,余下的数字按原次序组成一个新的正整数m。对给定的n, s, 寻找一种方案,使得组成的新数m最小。

    Input(输入描述):

    输入n

    输入s (s<n的位数)

    Output(输出描述):

    输出m

    Sample Input(输入样例):

    83179254297017652

    9

    Sample Output(输出样例):

    12017652

    Test Input(输入测试数据):

    36271467471259413861475862384788157954123651991367343325

    29

    Test Output(输出测试数据):

    111115754123651991367343325

    Hint(提示信息):

    Source(来源信息):

    Code(测试代码):(要求用C语言)

     1 #include<stdio.h>
     2 
     3 #include<string.h>
     4 
     5 int main()
     6 
     7 {
     8 
     9        int i,t,x,s,k,ln;
    10 
    11        char a[101];
    12 
    13        scanf("%s",a);
    14 
    15        scanf("%d",&s);
    16 
    17        ln=strlen(a);
    18 
    19        i=0;t=0;x=0;
    20 
    21        while(s>x&&t==0)
    22 
    23        {
    24 
    25               if(a[i]>a[i+1])
    26 
    27               {
    28 
    29                      for(k=i;k<=ln-x-2;k++)
    30 
    31                             a[k]=a[k+1];
    32 
    33                      x=x+1;
    34 
    35                      i=-1;
    36 
    37               }
    38 
    39               if(i==ln-x-2) t=1;
    40 
    41               i++;
    42 
    43        }
    44 
    45        for(i=0;i<=ln-s-1;i++)
    46 
    47               printf("%c",a[i]);
    48 
    49        return 0;
    50 
    51 }

    Title(题目)

    真子串

    Problem ID(题目编号)

    (题目添加成功后由系统自动生成)

    Time Limit(运行时间限制)

    S(秒)

    Memory Limit(内存限制)

    MByte(兆)

    Description(题目描述):

    真子串是指从原字符串中通过删除某些字符但不破坏余下字符的顺序而形成的新字符串。输入n个字符串,统计出现某个字符串是另一个字符串的真子串的组数。

    Input(输入描述):

    输入n及n个字符串

    Output(输出描述):

    真子串数目

    Sample Input(输入样例):

    3

    abc

    cxajfkabjfkdc

    xjfabkdc

    Sample Output(输出样例):

    3

    Test Input(输入测试数据):

    10

    fjdakie

    jfda;iea;fj

    feiw

    e

    hi

    jk

    fjieawo;fj;ijfdias

    djafsak;ieafa;iewe

    hhhh

    fjweioa;jf;aii

    Test Output(输出测试数据):

    15

    Hint(提示信息):

    Source(来源信息):

    Code(测试代码):(要求用C语言)

     1 #include<stdio.h>
     2 
     3 #include<string.h>
     4 
     5 int main()
     6 
     7 {
     8 
     9        int i,j,n,count=0;
    10 
    11        char seq[100][100];
    12 
    13        int subseq(char s1[],char s2[]);
    14 
    15        scanf("%d",&n);
    16 
    17        getchar();
    18 
    19        for(i=0;i<n;i++)
    20 
    21               gets(seq[i]);
    22 
    23        for(i=0;i<n;i++)
    24 
    25               for(j=0;j<n;j++)
    26 
    27                      count+=subseq(seq[i],seq[j]);
    28 
    29  
    30 
    31        printf("%d
    ",count);
    32 
    33  
    34 
    35        return 0;
    36 
    37 }
    38 
    39  
    40 
    41 int subseq(char s1[],char s2[])
    42 
    43 {
    44 
    45        int m,n;
    46 
    47        int i,j,s=0;
    48 
    49        m=strlen(s1);n=strlen(s2);
    50 
    51        if (m>=n) return 0;
    52 
    53        for(i=0;i<m;i++)
    54 
    55               for(j=0;j<n;j++)
    56 
    57                      if(s1[i]==s2[j])
    58 
    59                      {
    60 
    61                             s+=1;
    62 
    63                             break;
    64 
    65                      }
    66 
    67        if(s<m) return 0;
    68 
    69        else return 1;
    70 
    71 }

    Title(题目)

    购票排队

    Problem ID(题目编号)

    (题目添加成功后由系统自动生成)

    Time Limit(运行时间限制)

    S(秒)

    Memory Limit(内存限制)

    MByte(兆)

    Description(题目描述):

    一场球赛开始之前,售票工作正在紧张的进行中。每张球票为50元。现有m+n个人排队等待购票,其中有m个人手持50元的钞票,另外n个人手持100元的钞票。求出这m+n个人排队购票,使得售票处不至于出现找不开钱的局面的不同排队种数。约定,拿同样面值钞票的人对换位置后为同一种排队。

    Input(输入描述):

    输入m,n (m<100, n<100)

    Output(输出描述):

    输出排队种数

    Sample Input(输入样例):

    15,12

    Sample Output(输出样例):

    4345965

    Test Input(输入测试数据):

    20,10

    Test Output(输出测试数据):

    15737865

    Hint(提示信息):

    Source(来源信息):

    Code(测试代码):(要求用C语言)

     1 #include<stdio.h>
     2 
     3 #include<string.h>
     4 
     5 int main()
     6 
     7 {
     8 
     9        int i,j,m,n;
    10 
    11        long f[100][100];
    12 
    13        scanf("%d,%d",&m,&n);
    14 
    15        for(j=1;j<=m;j++)
    16 
    17               f[j][0]=1;
    18 
    19        for(j=0;j<=m;j++)
    20 
    21               for(i=j+1;i<=n;i++)
    22 
    23                      f[j][i]=0;
    24 
    25        for(i=1;i<=n;i++)
    26 
    27               for(j=i;j<=m;j++)
    28 
    29                      f[j][i]=f[j-1][i]+f[j][i-1];
    30 
    31        printf("%ld
    ",f[m][n]);
    32 
    33  
    34 
    35        return 0;
    36 
    37 }

    Title(题目)

    序列相似度

    Problem ID(题目编号)

    (题目添加成功后由系统自动生成)

    Time Limit(运行时间限制)

    S(秒)

    Memory Limit(内存限制)

    MByte(兆)

    Description(题目描述):

    有两条字母序列(区分大小写),计算两者的相似度。这里,相似度定义为两者最长公共子序列的长度与其中较长字母序列的长度之比。例如序列s1=abcbdab和序列 s2=bdcaba的某个最长公共子序列为bcba,且长度为4,而s1的长度为7,s2的长度为6,那么s1和s2的相似度为4/7.

    Input(输入描述):

    输入数据有多组,每行输入两个字母序列,用空格隔开。每条序列长度不超过100。最后输入“0 0” 表示结束。

    Output(输出描述):

    输出每组序列的相似度,小数点后保留三位小数。

    Sample Input(输入样例):

    abc acbt

    abcbdab bdcaba

    0 0

    Sample Output(输出样例):

    0.500

    0.571

    Test Input(输入测试数据):

    uefhuahfusdas fhadfhau

    eywhfuiafhusdhufhal werujdcfhhh

    nvbjhdfncjasdhdbc hjdasluuqwiubfhahlufkjchgsd

    jaslhfljhulasdhfulihlasdafhulf fhasdjlhfdshfauefhlu

    jhuewuhluihalf djhafjlhjafhjlhfalkh

    abcdefghijklmn abcdefghijklmn

    dfjaksjkdsalewuihfjasklhu lhfahdjklahfdjfhajskhfjka

    uieqwhfuualuiahfusdjlh jladshfjlkashlaks

    qwetyyerywquuuquu nnbnzbnvnnnnnzxcnmnmnzxv

    jhfadshfjkaslhalj jkdlafshjflajldksalkhaflfhajl

    0 0

    Test Output(输出测试数据):

    0.385

    0.316

    0.222

    0.400

    0.350

    1.000

    0.480

    0.318

    0.000

    0.448

    Hint(提示信息):

    Source(来源信息):

    Code(测试代码):(要求用C语言)

     1 #include<stdio.h>
     2 
     3 #include<string.h>
     4 
     5 int main()
     6 
     7 {
     8 
     9        int i,j,m,n,maxlen;
    10 
    11        char s[101],t[101];
    12 
    13        int c[101][101];
    14 
    15        while(1)
    16 
    17        {
    18 
    19               scanf("%s%s",s,t);
    20 
    21               if(strcmp(s,"0")==0 &&strcmp(t,"0")==0) break;
    22 
    23               m=strlen(s);n=strlen(t);
    24 
    25               maxlen=m>n?m:n;
    26 
    27               for(i=0;i<=m;i++) c[i][n]=0;
    28 
    29               for(j=0;j<=n;j++) c[m][j]=0;
    30 
    31               for(i=m-1;i>=0;i--)
    32 
    33                      for(j=n-1;j>=0;j--)
    34 
    35                             if(s[i]==t[j])  c[i][j]=c[i+1][j+1]+1;
    36 
    37                             else if (c[i][j+1]>c[i+1][j]) c[i][j]=c[i][j+1];
    38 
    39                             else c[i][j]=c[i+1][j];
    40 
    41               printf("%.3f
    ",c[0][0]/(float)maxlen);
    42 
    43  
    44 
    45        }
    46 
    47  
    48 
    49        return 0;
    50 
    51 }
  • 相关阅读:
    微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇
    微软企业库5.0 学习之路——第六步、使用Validation模块进行服务器端数据验证
    微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——下篇
    微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——中篇
    微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇
    微软企业库5.0 学习之路——第四步、使用缓存提高网站的性能(EntLib Caching)
    微软企业库5.0 学习之路——第二步、使用VS2010+Data Access模块建立多数据库项目
    微软企业库5.0 学习之路——第一步、基本入门
    linux时间管理 之 jiffies
    IOCTL函数用法
  • 原文地址:https://www.cnblogs.com/wushuaiyi/p/3470361.html
Copyright © 2011-2022 走看看