青少年軟件編程(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\n");
  else printf("%d\n",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\n",str);
        for(i=0;i<len;i++)
        printf("%c",result[i]);
        printf("\n");
        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;
        }
    }
}

就這樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM