zoukankan      html  css  js  c++  java
  • 编程题训练5

    编程题1:给出两个数,输出最大公约数与最大公倍数

     1 #include <iostream>
     2 #include<stdio.h>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int m,n,a;
     8     while((cin>>m>>n)!=NULL)
     9     {
    10         while(m>0&&n>0&&m==n)
    11         {
    12             cout<<1<<endl;
    13             cout<<m<<endl;
    14             return 0;
    15         }
    16         while(m>0&&n>0&&m!=n)
    17         {
    18             for(int i=2;i<=m*n;i++)
    19             {
    20                 if(m%i==0&&n%i==0)
    21                 {
    22                     cout<<i<<endl;
    23                     cout<<m*n/i<<endl;
    24                 }
    25             }
    26             return 0;
    27         }
    28     }
    29     //return 0;
    30 }

    编程题2:数字和为sum的方法数

    题目:给定一个有n个正整数的数组A和一个整数sum,,求选择数组中部分数字和为sum的方案数。当两种选取方案有一个数字的下标不一样,我们就认为是不同的组成方案。

    输入:第一行为两个正整数n(1<=n<=1000),sum(1<=sum<=1000);

    第二行为n个正整数Ai,以空格隔开

    输出:输出所求的方案数

    例1:输入

    5 15

    5 5 10 2 3

    输出: 4

     1 #include <iostream>
     2 #include <stdio.h>
     3 using namespace std;
     4 typedef long long LL;
     5 
     6 LL dp[1000][1000];
     7 int main()
     8 {
     9     int n,sum;
    10     scanf("%d %d",&n,&sum);
    11     int array[1000];
    12     for(int i=0;i<n;i++) cin>>array[i];
    13     while(n>=1&&n<=1000&&sum>=1&&sum<=1000)
    14     {
    15         for(int j=0;j<n;j++) dp[0][j]=0;
    16         dp[0][0]=1;
    17         for(int i=1;i<=n;i++)
    18         {
    19             for(int j=0;j<=sum;j++)
    20             {
    21                 dp[i][j]=dp[i-1][j];
    22                 if(j>=array[i-1]) dp[i][j] +=dp[i-1][j-array[i-1]];
    23             }
    24         }
    25         cout<<dp[n][sum]<<endl;
    26         return 0;
    27     }
    28 }

    编程题3:

    题目:有一堆石子共有N个。A B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。假设A,B都非常聪明,拿石子的过程不会出现失误。给出N和K,问最后谁能赢得比赛。假如N=3,K=2.无论A如何拿,B都可以拿到最后1颗石子。

    输入:第1行:一个数T,表示后面用作输入测试的数的数量。(1<=T<=10000)

    第2-T+1行:每行2个数N,K。中间用空格分隔。

    输出:共T行,如果A获胜输出A,如果B获胜输出B。

    例1:输入

    4

    3 2

    4 2

    7 3

    8 3

    输出

    B

    A

    A

    B

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int t;
     8     cin>>t;
     9     int array[10000][2];
    10     for(int i=0;i<t;i++)
    11     {
    12         for(int j=0;j<2;j++) cin>>array[i][j];
    13     }
    14     for(int i=0;i<t;i++)
    15     {
    16         if(array[i][0]<=array[i][1])
    17         {
    18             cout<<"A"<<endl;
    19             continue;
    20         }
    21         else
    22         {
    23             array[i][0]%=(array[i][1]+1);
    24             if(array[i][0]==0)
    25                 cout<<"B
    ";
    26             else
    27                 cout<<"A
    ";
    28         }
    29 
    30     }
    31     return 0;
    32 }

    编程题4:

        给定一个空的int类型的二维数组array[n][m]。按下面的填充规则,请编写一个函数将此二维数组填满并打印出来。

    1 2 4 7
    3 5 8 11
    6 9 12 14
    10 13 15 16

    输入描述:输入的包括两个正整数,表示二维数组的大小n,m(1<=n,m<=10)

    输出描述:打印结果,每行行末无空格。

    例1:输入为4 4

    输出为

    1 2 4 7

    3 5 8 11

    6 9 12 14

    10 13 15 16

    思路:首先先找出规律,是按照i+j=(0,1,2,n*m)来递增赋值。接下来就是编写程序了。

    代码如下

     1 #include <iostream>
     2 #include<stdio.h>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int n,m;
     8     scanf("%d %d",&n,&m);
     9     int a[100][100]={1},com=1;
    10     if(n>=1&&n<=10&&m>=1&&m<=10)  //判断下标是否超出
    11     {
    12         for(int k=1;k<=n*m;k++)
    13         {
    14             for(int i=0;i<n;i++)
    15             {
    16                 for(int j=0;j<m;j++)
    17                 {
    18                     if(i+j==k)
    19                     {
    20                         a[i][k-i]=com+1;
    21                         com=a[i][k-i];
    22                     }
    23                 }
    24             }
    25         }
    26         for(int i=0;i<n;i++)   //输出二维数组
    27         {
    28             for(int j=0;j<m;j++) cout<<a[i][j]<<" ";
    29             cout<<endl;
    30         }
    31     }
    32     else cout<<"error"<<endl;
    33     return 0;
    34 }

  • 相关阅读:
    接口
    多态
    static的用法
    Person类中多个构造方法和测试
    曹操外卖实现功能
    曹操外卖数据表设计
    java中 try catch finally和return联合使用时,代码执行顺序的小细节
    GenerationType四中类型
    spring boot
    VMware修改为静态ip
  • 原文地址:https://www.cnblogs.com/lijuanhu321/p/9624346.html
Copyright © 2011-2022 走看看