zoukankan      html  css  js  c++  java
  • 青少年软件编程(C语言)等级考试试卷(三级)

    1.因子问题

    因子问题

    任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。

    时间限制:10000
    内存限制:65536
    输入
    包括两个整数N、M。N不超过1,000,000。
    输出
    输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存在,则在对应行输出-1
    样例输入
    35 10
    
    样例输出
    5
    #include <stdio.h>
    int main(int argc, char *argv[])
    {
      int N,M,a=0,t;
      scanf("%d%d",&N,&M);
      t=M/2;
      for(a=1;a<=t;a++)
      {
          if( N%a==0 && (N%(M-a)==0) ) { t=-1; break; }
      }
      if(t!=-1) printf("-1
    ");
      else printf("%d
    ",a);
      return 0;
    }

    2.质数的和与积

    质数的和与积

    两个质数的和是S,它们的积最大是多少?

    时间限制:10000
    内存限制:65536
    输入
    一个不大于10000的正整数S,为两个质数的和。
    输出
    一个整数,为两个质数的最大乘积。数据保证有解。
    样例输入
    50
    样例输出
    589
    #include <bits/stdc++.h>
    int prime(int h)
    {
         if(h < 2)
         {
           return 0;
         }
         for(int i=2;i<=h/2;++i)
         {
               if(!(h%i))return 0;
         }
        return 1;
    }
    int main( )
    { 
      int n;
      int max=0;
      int sj=1;
      int m;
      scanf("%d",&n);
      for(int i=2;i<n;++i)
      {
            if(prime(i))
            {
                 m=n-i;
            
              if(prime(m))
              {
                   sj=m*i;
                 if(max<sj)max=sj;
              }
        }
    
    
    }
    printf("%d",max);
    
    
    }

    3.扩号匹配问题

    扩号匹配问题
    在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注.
    时间限制:3000
    内存限制:65536
    输入
    输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100
    输出
    对每组输出数据,输出两行,第一行包含原始输入字符,第二行由"$","?"和空格组成,"$"和"?"表示与之对应的左括号和右括号不能匹配。
    样例输入
    ((ABCD(x)
    )(rttyy())sss)(
    样例输出
    ((ABCD(x)
    $$
    )(rttyy())sss)(
    ?            ?$
    #include<stdio.h>
    #include<string.h>
    #include<malloc.h>
    typedef struct node
    {
        char ch[100];
        char sign[100];
        char index[100];
        int length;
    }
    Stack;
    void init(Stack *&s,int n)
    {
        s=(Stack*)malloc(n*sizeof(Stack));
        int i;
        for(i=0;i<n;i++)
        {
            s->ch[i]=' ';
            s->sign[i]=' ';
            s->index[i]=0;
        }
        s->length=0;
    }
    void push(Stack *&s,char ch ,int index)
    {
        if(s->length<100)
        {
            s->ch[s->length]=ch;
            s->index[s->length]=index;
            if(ch=='(')
            s->sign[s->length]='$';
            if(ch==')')
            s->sign[s->length]='?';
        }
        s->length++;
    }
    void pop(Stack *&s,char ch,int index)
    {
        if(s->length>0&&s->ch[s->length-1]=='(')
        {
            s->length--;
        }
        else
        {
        push(s,ch,index);
        } 
    } 
     
    int main()
    {
        char str[101];
        char result[101];
        int i,j,k,len,index;
        Stack *s; 
        while(gets(str))
        {
            len = strlen(str);
            init(s,len);
            for(i=0;i<len;i++)
            {
                if(str[i]=='(')
                {
                    push(s,str[i],i);
                }
                else if(str[i]==')')
                {
                    pop(s,str[i],i);
                }
                else 
                {
                    continue;
                }
            } 
            k = 0;
            for(j=0;j<len;j++)
            result[j]=' ';
            while(k<s->length)
            { 
              index = s->index[k];
              result[index]=s->sign[k];
              k++; 
            } 
            printf("%s
    ",str);
            for(i=0;i<len;i++)
            printf("%c",result[i]);
            printf("
    ");
            free(s);
        }
        return 0;
    }

    4.不会

    5.铺砖

    铺砖

    对于一个2行N列的走道。现在用1*2,2*2的砖去铺满。问有多少种不同的方式。


    时间限制:3000
    内存限制:131072
    输入

    整个测试有多组数据,请做到文件底结束。每行给出一个数字N,0 <= n <= 250

    输出

    如题

    样例输入
    2
    8
    12
    100
    200
    样例输出
    3
    171
    2731
    845100400152152934331135470251
    10712920295059935170279747282274417350148
    #include<iostream>
    #include<cstdio>
    using namespace std;
    int a[301][501];
    int max(int x,int y){return x>y?x:y;}
    int main()
    {
        a[1][0]=1;
        a[1][1]=1;
        a[2][0]=1;
        a[2][1]=3;
        for(int i=3;i<=300;i++)
        {
            for(int j=1;j<=max(a[i-2][0],a[i-1][0]);j++)
            {
                a[i][j]=a[i-1][j]+a[i-2][j]*2;
            a[i][0]=max(a[i-2][0],a[i-1][0]);
            }
            for(int j=1;j<=a[i][0];j++)
            {
                a[i][j+1]+=a[i][j]/10;
                a[i][j]%=10;
            }
            while(a[i][a[i][0]+1])
            {
                a[i][0]++;
                a[i][a[i][0]+1]+=a[i][a[i][0]]/10;
            }
        }
        int n;
        while(cin>>n)
        {
            if(n==0)
            {
              cout<<1<<endl;
            }
            else
            {
                for(int i=a[n][0];i>=1;i--)
                {
                  cout<<a[n][i];
                }
                cout<<endl;
            }
        }
    }

    就这样。

  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1036. Boys vs Girls (25)
    1035 Password (20)
    1027 Colors in Mars (20)
    1009. Product of Polynomials (25)
    1006. Sign In and Sign Out
    1005 Spell It Right (20)
    1046 Shortest Distance (20)
    ViewPager页面滑动,滑动到最后一页,再往后滑动则执行一个事件
    IIS7.0上传文件限制的解决方法
  • 原文地址:https://www.cnblogs.com/iamxuwu/p/13660079.html
Copyright © 2011-2022 走看看