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;
            }
        }
    }

    就这样。

  • 相关阅读:
    【概念】using 三种使用方式
    2019-7-2 作业1 2 3
    异常
    java.lang.NullPointerException
    课外作业(建立double类型的小数,按照四舍五入保留2位小数)
    作业1.2.3.4
    左自增与右自增的区别
    深入了解JVM(Java虚拟机)
    Eclipse报错Could not resolve archetype
    ThinkPad E550 连蓝牙鼠标logitech M557
  • 原文地址:https://www.cnblogs.com/iamxuwu/p/13660079.html
Copyright © 2011-2022 走看看