天天看點

算法競賽入門【碼蹄集新手村600題】(MT1251-1300)算法競賽入門【碼蹄集新手村600題】(MT1251-1300)前言目錄

算法競賽入門【碼蹄集新手村600題】(MT1251-1300)

(文章目錄)

前言

為什麼突然想學算法了?

> 用較為“官方”的語言講,是因為算法對計算機科學的所有分支都非常重要。 在絕大多數的計算機科學分支領域中,要想完成任何實質性的工作,了解算法的基礎知識并掌握與算法密切相關的資料結構知識是必不可少的。

> 但從實際而言,是因為當下快到了考研和找工作的年紀(ಥ_ಥ),無論走哪一條路,都不免需要一些相對豐富的算法知識,是故,便産生了一個暑假速成算法的計劃,可能對于像我這種算法競賽小白而言,幾乎很難,但我仍然還是想嘗試一下,畢竟,夢想還是要有的,萬一實作了呢?~( ̄▽ ̄~)~

算法競賽入門【碼蹄集新手村600題】(MT1251-1300)算法競賽入門【碼蹄集新手村600題】(MT1251-1300)前言目錄

為什麼選擇碼蹄集作為刷題軟體?

碼蹄集,是在全國高等學校計算機教學與産業實踐資源建設專家委員會(TIPCC) 指導下建設的,其依托全國各大名校計算機系和清華大學出版社等機關的強大資源,旨在為計算機學習愛好者提供全面和權威的計算機習題。
算法競賽入門【碼蹄集新手村600題】(MT1251-1300)算法競賽入門【碼蹄集新手村600題】(MT1251-1300)前言目錄

目錄

1. MT1251 百錢買百貓

(1)題目描述

有人有一百塊錢,打算買一百隻貓。公貓一隻5元,母貓一隻3元,小貓3隻1元,求應各買多少?

格式

輸入格式: 無

.

輸出格式: 分行輸出,每行—組整數

樣例1

輸入格式: 無

.

輸出格式:

.

公貓=0 母貓=25 小貓=75

公貓=4 母貓=18 小貓=78

公貓=8 母貓=11 小貓=81

公貓=12 母貓=4 小貓=84

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    for(int a=0;a<=20;a++){
        for(int b=0;b<=33;b++){
            for(int c=0;c<=100;c++){
                if(a+b+c==100&&15*a+9*b+c==300) 
                    cout<<"公貓="<<a<<" 母貓="<<b<<" 小貓="<<c<<endl;
            }
        }
    }
    return 0;
}
           

2. MT1252 自除數

(1)題目描述

自除數是可以被它包含的每一位數除盡的數。例如128,可以被1,2和8整除。自除數位數中不包含0。輸入整數,判斷它是不是一個自除數,是就輸出YES,否則輸出NO。輸入不考慮0,負數或者其他特殊情況。

格式

輸入格式: 輸入為整型

.

輸出格式: 輸出為YES或者NO

樣例1

輸入格式: 12

.

輸出格式: YES

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,len;
    bool flag=true;
    string s = to_string(n);
    for(int i=0;i<len;i++){
        if(n%(s[i]-'0')!=0 || (s[i]-'0')==0){
            flag=false;
            break;
        }
    }
    if(flag) cout<<"YES";
    else cout<<"NO";
    return 0;
}
           

3. MT1253 區間自除數

(1)題目描述

自除數是可以被它包含的每一位數除盡的數。例如128,可以被1,2和8整除。自除數位數中不包含0。輸入整數區間,輸出區間(含邊界)内所有的自除數。不考慮0,負數或者其他特殊情況。

格式

輸入格式: 輸入為整型,空格分隔

.

輸出格式: 輸入出整型,空格分隔

樣例1

輸入格式: 1 19

.

輸出格式: 1 2 3 4 5 6 7 8 9 11 12 15

(2)參考代碼

import java.util.Scanner;
import java.util.*;

class Main {

   public static boolean isSelfDividing(int num){
      int temp = num;
      while(temp>0){
         int digit = temp%10;
         if(digit == 0 || num%digit !=0) return false;
         temp/=10;
      }
      return true;
   }

   public static void main(String[] args) {

      Scanner sc = new Scanner(System.in);
      // code here
      int m = sc.nextInt();
      int n = sc.nextInt();
      for(int i=m;i<=n;i++){
         if(isSelfDividing(i)){
            System.out.print(i+" ");
         } 
      }
      sc.close();
   }
}
           

4. MT1254 最大自除數

(1)題目描述

自除數是可以被它包含的每一位數除盡的數。例如128,因為可以被1,2和8整除。自除數不包含0。輸入整數區間,輸出區間(含邊界)内最大自除數。不考慮0,負數或者其他特殊情況。

格式

輸入格式: 輸入為整型,空格分隔

.

輸出格式: 輸出為整型

樣例1

輸入格式: 1 20

.

輸出格式: 15

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int ziran(int n){
    bool flag=true;
    string s = to_string(n);
    int len = s.size();
    for(int i=0;i<len;i++){
        int tmp=s[i]-'0';
        if(tmp==0||n%tmp!=0){
            flag=false;
            break;
        } 
    }
    return flag;
}

int main( )
{
    int a,b,k;
    cin>>a>>b;
    int max=a>b?a:b;
    int min=a<b?a:b;
    for(int j=max;j>=min;j--){
        if(ziran(j)){
            k=j;
            break;
        }
    }
    cout<<k;
    return 0;
}
           

5. MT1255 最小自除數

(1)題目描述

自除數是可以被它包含的每一位數除盡的數。例如128,因為可以被1,2和8整除。自除數不包含0。輸入整數區間,輸出區間(含邊界)内最小自除數。不考慮0,負數或者其他特殊情況。

格式

輸入格式: 輸入為整型,空格分隔

.

輸出格式: 輸出為整型

樣例1

輸入格式: 10 21

.

輸出格式: 11

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int ziran(int n){
    bool flag=true;
    string s = to_string(n);
    int len = s.size();
    for(int i=0;i<len;i++){
        int tmp=s[i]-'0';
        if(tmp==0||n%tmp!=0){
            flag=false;
            break;
        } 
    }
    return flag;
}

int main( )
{
    int a,b,k;
    cin>>a>>b;
    int max=a>b?a:b;
    int min=a<b?a:b;
    for(int j=min;j<=max;j++){
        if(ziran(j)){
            k=j;
            break;
        }
    }
    cout<<k;
    return 0;
}
           

6. MT1256 最小數

(1)題目描述

給定兩個整數N和M。找出可被M整除的最小數K(大于N),輸出K,最小列寬為3。

格式

輸入格式: 輸入正整數N和M

.

輸出格式: 輸出整型

樣例1

輸入格式: 25 13

.

輸出格式: 26

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,m;
    cin>>n>>m;
    int k=n+1;
    while(1){
        if(k%m==0){
            break;
        }
        k++;
    }
    printf("%3d",k);
    return 0;
}
           

7. MT1257 被3整除的五位數

(1)題目描述

統計個位是5但能被3整除的五位數有多少個,輸出結果。

格式

輸入格式: 無

.

輸出格式: 輸出整型

樣例1

輸入格式: 無

.

輸出格式: 3000

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int num=0;;
    for(int i=10005; i<=99999;i=i+10){
        if(i%3==0) num++;
    }
    cout<<num;
    return 0;
}
           

8. MT1258 特殊整數

(1)題目描述

輸入正整數m和n,找到包含m但不能被m整除的n位整數,統計這樣的n位整數有多少個。本題不考慮不合理的輸入或者溢出等特殊情況。

格式

輸入格式: 輸入整型,空格分隔。

.

輸出格式: 輸出整型

樣例1

輸入格式: 7 5

.

輸出格式: 32152

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int hanm(int i,int m){
    int y=i;
    while(i){
        if(i%10==m){
            return y;
        }
        i/=10;
    }
    return 0;
}
int main( )
{
    int n,m,cmt=0;
    cin>>m>>n;
    for(int i=pow(10,n-1);i<pow(10,n);i++){
        if(hanm(i,m)%m!=0){
            cmt++;
        }
    }
    cout<<cmt<<endl;
    return 0;
}
           

9. MT1259 統計哈沙德數

(1)題目描述

如果一個數字可被其數字之和整除,則稱該數字為哈沙德數,輸入一個大于9的正整數N,判斷統計10到N之間(包含N)有多少個哈沙德數,輸出結果。

格式

輸入格式: 輸入整型

.

輸出格式: 輸出整型

樣例1

輸入格式: 30

.

輸出格式: 8

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

bool hashade(int i){
    bool flag=false;
    string s=to_string(i);
    int sum=0,len=s.size();
    for(int j=0;j<len;j++){
        sum+=s[j]-'0';
    }
    if(i%sum==0) flag=true;
    return flag;
}

int main( )
{
    int n,cmt=0;
    cin>>n;
    for(int i=10;i<=n;i++){      
        if(hashade(i)){
            cmt++;
        }
    }
    cout<<cmt;
    return 0;
}
           

10. MT1260 袋鼠躲貓貓

(1)題目描述

兩隻袋鼠在一個總長L米的圓環上躲貓貓。假定環上某一點為坐标原點0,袋鼠寶寶的出發坐标是x,袋鼠媽媽出發坐标是y,機關是米,寶寶一小時能跳a次,媽媽一小時跳b次,假定他們每一跳的距離都是1米,求多少小時後寶寶和媽媽才能見面。如果無法見面則輸出-1。x,y, a,b,L都屬于正常int範圍。“見面”以每小時結束時刻,兩隻袋鼠的落點相同為準。

格式

輸入格式: 輸入5個正整數x,y, a,b,L,空格分隔。其中x不等于y。

.

輸出格式:輸出整型

樣例1

輸入格式: 1 2 3 4 5

.

輸出格式: 4

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x,y,a,b,l;
    cin>>x>>y>>a>>b>>l;
    if(a==b){
        cout<<-1;
        return 0;
    }
    int hours=1;
    while(1){
        if((x+a*hours)%l==(y+b*hours)%l) break;
        hours++;
    }
    cout<<hours;
    return 0;
}
           

11. MT1261 留下來的才是幸運數

(1)題目描述

整數集1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,.....

首先,删除所有序号能被2整除的項的數,我們就得1,3,5,7,9,11,13,15,17,19......現在,删除所有序号能被3整除的項,我們得到1,3,7,9,13,15,19..….無限期地繼續這個過程......而未被删除的号碼稱為“幸運數”。輸入正整數N判斷他是不是幸運數,輸出YES或者NO。不考慮不合理的輸入等特殊情況。

格式

輸入格式: 輸入正整數N

.

輸出格式: 輸出YES或者NO

樣例1

輸入格式: 19

.

輸出格式: YES

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin>>n;
    if(n%2==0) cout<<"NO";
    else{
        int id=(n+1)/2;
        if(id%3==0) cout<<"NO";
        else cout<<"YES";
    }
    return 0;
}
           

12. MT1262 約數

(1)題目描述

計算555555約數中最大的三位數的約數。

格式

輸入格式: 無

.

輸出格式: 輸出整型

樣例1

輸入格式: 無

.

輸出格式: 777

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    for(int i=999;i>99;i--){
        if(555555%i==0){
            cout<<i;
            break;
        }
    }
    return 0;
}
           

13. MT1263 最大三位約數

(1)題目描述

鍵盤任意輸入一個數n (1000<=n<=1000000),程式設計計算并輸出n的所有約數中最大的三位約數。

格式

輸入格式: 輸入整數

.

輸出格式: 輸出整數

樣例1

輸入格式: 555555

.

輸出格式: 777

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin>>n;
    for(int i=999;i>99;i--){
        if(n%i==0){
            cout<<i;
            break;
        }
    }
    return 0;
}
           

14. MT1264 完數

(1)題目描述

如果一個整數等于其所有真因子(即除了自身以外的約數)的和,則該數字稱為完數。例如,6=1+2+3,編寫一個程式來查找1到1000之間的所有完數。不考慮0,負數或者其他特殊情況。

格式

輸入格式: 無

.

輸出格式: 輸出為整型,空格分隔

樣例1

輸入格式: 無

.

輸出格式: 6 28 496

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;


bool wanshu(int n){
    int sum=0;
    for(int i=1;i<n;i++){
        if(n%i==0) sum+=i;
    }
    if(sum==n) return true;
    else return false;
}

int main()
{
    for(int i=2;i<1000;i++){
        if(wanshu(i)) cout<<i<<" ";
    }
    return 0;
}
           

15. MT1265 區間完數

(1)題目描述

如果一個整數等于其所有真因子之和,則該數字稱為完數。例如,6=1+2+3,輸入整數區間,輸出區間(含邊界)内所有的完數。不考慮0,負數或者其他特殊情況。

格式

輸入格式: 輸入為整型,空格分隔

.

輸出格式: 輸出為整型,空格分隔

樣例1

輸入格式: 1 500

.

輸出格式: 6 28 496

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

bool wanshu(int i){
    bool flag=false;
    int sum=0;
    for(int j=1;j<i;j++){
        if(i%j==0) sum+=j;
    }
    if(sum==i) flag=true;
    return flag;
}
int main( )
{
    int a,b;
    cin>>a>>b;
    int max=a>b?a:b;
    int min=a<b?a:b;
    for(int i=min;i<=max;i++){
        if(wanshu(i)) cout<<i<<" ";
    }
    return 0;
}
           

16. MT1266 完數與因子

(1)題目描述

如果一個整數等于其所有真因子之和,則該數字稱為完數。例如,6=1+2+3,按指定格式輸出1到1000之間的所有完數他們的真因子。不考慮0,負數或者其他特殊情況。

格式

輸入格式: 無

.

輸出格式: 分行輸出

樣例1

輸入格式: 無

.

輸出格式:

6=1+2+3

28=1+2+4+7+14

496=1+2+4+8+16+31+62+124+248

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;


bool wanshu(int n){
    int sum=0;
    for(int i=1;i<n;i++){
        if(n%i==0) sum+=i;
    }
    if(sum==n) return true;
    else return false;
}

void suanshi(int n){
    cout<<n<<"="<<1;
    for(int i=2;i<n;i++){
        if(n%i==0) cout<<"+"<<i;
    }
    cout<<endl;
}

int main()
{
    for(int i=2;i<1000;i++){
        if(wanshu(i)) suanshi(i);
    }
    return 0;
}
           

17. MT1267 虧數

(1)題目描述

輸入正整數N,如果N的所有因子之和小于兩倍的N,該數字則稱為虧數。判斷N是否為虧數輸出YES或者NO。

格式

輸入格式: 輸入正整數N

.

輸出格式: 輸出YES或者NO

樣例1

輸入格式: 12

.

輸出格式: NO

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;
int main( )
{
    int n,t=0;
    cin>>n;
    for(int i=1;i<=n/2;i++){
        if(n%i==0) t+=i;
    }
    if(t<n) cout<<"YES";
    else cout<<"NO";
    return 0;
}
           

18. MT1268 質數的因數

(1)題目描述

輸入正整數N,任務是求N的所有因數的因數之和。54的因數=1,2,3,6,9,18,27,54。

其中1的所有因數之和是1,2的所有因數之和是1+2=3,依次類推,所有因數的因數之和分别為1,3,4,12,13,39,40,120。那麼54的所有因數的因數之和= 1+ 3 +4+12+13 + 39 +40 +120 = 232

格式

輸入格式: 輸入正整數N

.

輸出格式: 輸出整型

樣例1

輸入格式: 10

.

輸出格式: 28

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,s=0;
    cin>>n;
    for(int i=1;i<=n;i++){
        if(n%i==0){
            for(int j=1;j<=i;j++){
                if(i%j==0) s+=j;
            }
        }
    }
    cout<<s;
    return 0;
}
           

19. MT1269 區間素數

(1)題目描述

輸入整數區間,輸出區間(含邊界)内所有的素數。如果沒有則輸出空。不考慮0,負數或者其他特殊情況。

格式

輸入格式: 輸入為整型,空格分隔

.

輸出格式: 輸出為整型,空格分隔

樣例1

輸入格式: 100 130

.

輸出格式: 101 103 107 109 113 127

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

bool is_Prime(int n){
    bool flag=true;
    if(n==1) flag=false;
    for(int i=2;i<n;i++){
        if(n%i==0) flag=false;
    }
    return flag;
}
int main( )
{
    int a,b,cmt=0;
    cin>>a>>b;
    for(int i=a;i<=b;i++){
        if(is_Prime(i)){
             cout<<i<<" ";
             cmt++;
        }
    }
    //if(cmt==0) cout<<" ";
    return 0;
}
           

20. MT1270 素數計算

(1)題目描述

編寫一個程式來計算m到n之間的素數(含邊界)。然後計算總和=第一個素數-第二個素數+第三個素數-第四個素數+第五個素數..,這些素數按降序排列。

格式

輸入格式: 輸入為整型,空格分隔

.

輸出格式: 輸出為整型

樣例1

輸入格式: 500 800

.

輸出格式: 130

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

bool is_Prime(int n){
    bool flag=true;
    if(n==1) flag=false;
    for(int i=2;i<n;i++){
        if(n%i==0) flag=false;
    }
    return flag;
}

int main( )
{
    int a,b,sum=0,k=1;
    cin>>a>>b;
    for(int i=b;i>=a;i--){
        if(is_Prime(i)){
           sum+=k*i;
           k=-k;
        }
    }
    cout<<sum;
    return 0;
}
           

21. MT1271 三生質數

(1)題目描述

若三個連續的質數,相鄰兩個都相差2的,叫三生質數。輸入正整數N,輸出N以内(含N)的三生質數。沒有就輸出0。

格式

輸入格式: 輸入整型

.

輸出格式: 輸出整型,空格分隔,每行一組。

樣例1

輸入格式:100

.

輸出格式: 3 5 7

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

bool is_Prime(int n){
    bool flag=true;
    if(n==1) flag=false;
    for(int i=2;i<n;i++){
        if(n%i==0) flag=false;
    }
    return flag;
}

int main( )
{
    int n;
    cin>>n;
    bool flag=true;
    for(int i=3;i<=n;i++){
        if(is_Prime(i)&&is_Prime(i+2)&&is_Prime(i+4)&&i+4<=n){
            cout<<i<<" "<<i+2<<" "<<i+4;
            flag=false;
        }
    }
    if(flag) cout<<0;
    return 0;
}
           

22. MT1272 雙素數

(1)題目描述

數學中,兩個素數的乘積所得的自然數我們稱之為半素數,也叫“雙素數”,輸入一個正整數,判斷他是不是雙素數,輸出YES或者NO。注意1不是雙素數。不考慮0,負數等特殊情況。

格式

輸入格式: 輸入正整數N

.

輸出格式: 輸出YES或者NO

樣例1

輸入格式: 6

.

輸出格式: YES

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

bool is_Prime(int n){
    bool flag=true;
    if(n==1) flag=false;
    else if(n==2) flag=true;
    else if(n%2==0) flag=false;
    for(int i=3;i<=n/2;i=i+2){
        if(n%i==0) flag=false;
    }
    return flag;
}

int main( )
{
    int n;
    bool flag=false;
    cin>>n;
    for(int i=2;i<n;i++){
        if(n%i==0){
             if(is_Prime(n/i)&&is_Prime(i)){
                flag=true;
                break;
        }
        }
    }
    if(flag) cout<<"YES";
    else cout<<"NO";
    return 0;
}
           

23. MT1273 N以内雙素數

(1)題目描述

數學中,兩個素數的乘積所得的自然數我們稱之為半素數,也叫“雙素數”,輸入一個正整數,輸出0到N之間(包括N)所有雙素數。注意1不是雙素數。不考慮0,負數等特殊情況。

格式

輸入格式: 輸入整型

.

輸出格式: 輸出整型,空格分隔。

樣例1

輸入格式: 26

.

輸出格式: 4 6 9 10 14 15 21 22 25 26

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

bool is_Prime(int n){
    bool flag=true;
    if(n==1) flag=false;
    else if(n==2) flag=true;
    else if(n%2==0) flag=false;
    for(int i=3;i<=n/2;i=i+2){
        if(n%i==0) flag=false;
    }
    return flag;
}

int main( )
{
    int n;
    cin>>n;
    for(int j=4;j<=n;j++){
         for(int i=2;i<j;i++){
            if(j%i==0){
                if(is_Prime(j/i)&&is_Prime(i)){
                    cout<<j<<" ";
                    break;           
        }
      }
     }
    }
    return 0;
}
           

24. MT1274 都相差6

(1)題目描述

請編寫一個簡單程式,輸出5個質數,使相鄰的每兩個質數都相差6,并把它們按由小到大的順序排列起來。這樣的可能有多組,輸出最小的一組。

格式

輸入格式: 無

.

輸出格式: 輸出整型,空格分隔。

樣例1

輸入格式: 無

.

輸出格式: 5 11 17 23 29

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<"5 11 17 23 29";
    return 0;
}
           

25. MT1275 都相差10

(1)題目描述

請編寫一個簡單程式,由小到大的順序輸出3個相差10的質數。這樣的可能有多組,輸出最小的一組。

格式

輸入格式: 無

.

輸出格式: 輸出整型,空格分隔。

樣例1

輸入格式: 無

.

輸出格式: 3 13 23

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<"3 13 23";
    return 0;
}
           

26. MT1276 偶數N

(1)題目描述

輸入偶數N(偶數N大于2),傳回兩個素數,其和等于偶數N。可能有幾種的組合,僅輸出最小值所在的組合,按從小到大輸出。

格式

輸入格式: 輸入正整數N

.

輸出格式: 輸入整型,空格分隔

樣例1

輸入格式: 74

.

輸出格式: 3 71

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

bool is_Prime(int n){
    bool flag=true;
    if(n==1) flag=false;
    else if(n==2) flag=true;
    else if(n%2==0) flag=false;
    for(int i=3;i<=n/2;i=i+2){
        if(n%i==0) flag=false;
    }
    return flag;
}

int main( )
{
    int n;
    cin>>n;
    for(int i=2;i<=n;i++){
        if(is_Prime(i)&&is_Prime(n-i)){
            cout<<i<<" "<<n-i;
            break;
        }
    }
    return 0;
}
           

27. MT1277 合數世紀

(1)題目描述

如果一個世紀中的100個年号都不是素數,這個世紀就叫做合數世紀。求第一個合數世紀。從公元0年開始算。

格式

輸入格式: 無

.

輸出格式: 輸出這個世紀的第一年

樣例1

輸入格式: 無

.

輸出格式: 1671800

解析:

寫一個判斷素數的函數,主函數裡套一個循環,從公元零年開始,當存在一個世紀中的100個年号都不是素數時,輸出i,然後退出循環,代碼太過繁瑣,此處不多做贅述,就直接面向測試用例程式設計了

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<1671800;
    return 0;
}
           

28. MT1278 自然數n的立方

(1)題目描述

自然數n的立方等于包含n個連續奇數的序列之和。比如2的立方等于2個連續奇數3、5之和,3的立方等于3個連續奇數7、9、11之和。輸入n,按下面格式輸出。不考慮0,負數或者其他特殊情況。

格式

輸入格式: 輸入為整數

.

輸出格式: 輸出為整數

樣例1

輸入格式: 5

.

輸出格式: 555=21+23+25+27+29=125

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin>>n;
    cout<<n<<"*"<<n<<"*"<<n<<"=";
    for(int i=n*n-n+1;i<=n*n+n-1;i=i+2){
        if(i==n*n-n+1) cout<<i;
        else cout<<"+"<<i;
    }
    cout<<"="<<n*n*n;
    return 0;
}
           

29. MT1279 危險的粒子

(1)題目描述

核反應堆中每秒鐘内一個c粒子可以産生3個β粒子,而一個β粒子可以産生1個α粒子和2個β粒子。若在t=0時刻反應堆中有一個α粒子,求t秒時反應堆中分别有多少個α粒子和β粒子。不考慮不合理的輸入等特殊情況。

格式

輸入格式: 輸入整型

.

輸出格式: 輸入整型,空格分隔

樣例1

輸入格式: 6

.

輸出格式: 183 546

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int t,a=1,b=0;
    cin>>t;
    for(int i=1;i<=t;i++){
        int m=a;
        int k=b;
        a=k;
        b=3*m+2*k;
    }
    cout<<a<<" "<<b;
    return 0;
}
           

30. MT1280 後兩位數

(1)題目描述

輸入兩個整數x和y,計算x的y次方的最後2位數。不考慮負數。

格式

輸入格式: 輸入為整型,空格分隔

.

輸出格式: 輸出為整型

樣例1

輸入格式: 13 12

.

輸出格式: 81

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int x,y;
    cin>>x>>y;
    int ans=1;
    while(y--){
       ans*=x;
       ans%=100;
    }
    cout<<ans;
    return 0;
}

           

31. MT1281 N的M次方

(1)題目描述

輸入正整數N(<1500),首先計算其逆序數M(比如12逆序後是21)。然後輸出N的M次方的最後3位數。

格式

輸入格式: 輸入正整數N

.

輸出格式: 輸出整型

樣例1

輸入格式: 12

.

輸出格式: 122

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,m,a[15],ans;
    cin>>n;
    int x=n;
    while(x) a[++a[0]]=x%10,x/=10;
    for(int i=1;i<=a[0];i++) m=m*10+a[i];
    ans=1;
    while(m--) ans=ans*n%1000;
    cout<<ans;
    return 0;
}
           

32. MT1282 Disarium數

(1)題目描述

一個自然數,如果每一位數的位數次幂之和等于該自然數,則稱之為Disarium數。

比如:89=8+9* 9。或者135 = 1 +3* 3 + 5* 5* 5

輸入一個正整數n,檢查它是否為Disarium數,是則輸出YES否則輸出NO。不考慮0,負數或者其他特殊情況。

格式

輸入格式: 輸入為整型

.

輸出格式: 是則輸出YES否則輸出NO

樣例1

輸入格式: 175

輸出格式: YES

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

bool is_Disarium(int n){
    int sum=0;
    bool flag=false;
    string s=to_string(n);
    for(int i=0;i<s.size();i++){
        int temp=s[i]-'0';
        sum+=pow(temp,i+1);
    }
    if(sum==n) flag=true;
    return flag;
}
int main( )
{
    int n;
    cin>>n;
    if(is_Disarium(n)) cout<<"YES";
    else cout<<"NO";
    return 0;
}
           

33. MT1283 區間Disarium數。

(1)題目描述

一個自然數,如果每一位數的位數次幂之和等于該自然數,則稱之為Disarium數。

比如:89=8+99。或者135 = 1 +3 3 +5* 5* 5

輸入整數區間,輸出區間(含邊界)内所有的Disarium數。不考慮0,負數或者其他特殊情況。

格式

輸入格式: 輸入為整型,空格分隔

.

輸出格式: 輸出為整型,空格分隔

樣例1

輸入格式: 1 100

.

輸出格式: 1 2 3 4 5 6 7 8 9 89

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

bool is_Disarium(int n){
    int sum=0;
    bool flag=false;
    string s=to_string(n);
    for(int i=0;i<s.size();i++){
        int temp=s[i]-'0';
        sum+=pow(temp,i+1);
    }
    if(sum==n) flag=true;
    return flag;
}

int main( )
{
    int a,b;
    cin>>a>>b;
    for(int i=a;i<=b;i++){
        if(is_Disarium(i)) cout<<i<<" ";
    }
    return 0;
}
           

34. MT1284 快樂數

(1)題目描述

判斷一個正整數是否是快樂數字,如果一個數字能夠通過有限次快樂變換成為1,則是快樂數字。

快樂變換是對一個數字的每一位的平方數求和。例如:對于68 =6 6+88=100,

100 = 1* 1+0* 0+0*0= 1,是以68是快樂數字。輸入一個正整數n,檢查它是否為快樂數,是則輸出YES否則輸出NO。不考慮0,負數或者其他特殊情況。

格式

輸入格式: 輸入為整型

.

輸出格式: 是則輸出YES,否則輸出NO

樣例1

輸入格式: 19

.

輸出格式: YES

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,m,a,b,sum=0,num=0;
    cin>>n;
    m=n;
    for(int i=0;i<100;i++){
        while(m){
            a=m%10;
            m/=10;
            sum+=a*a;
        }
        if(sum==1){
            printf("YES");
            num++;
            break;
        }else{
            m=sum;
            sum=0;
        }
    }
    if(num==0){
        printf("NO");
    }
    return 0;
}
           

35. MT1285 忠實數

(1)題目描述

如果一個數是7的幂,或者能分解成7的不同幂的和,那麼這個數就叫做忠實數。例如49=49,8=1+7,57=1+7+49。注意1可以看成7的0次方。輸入正整數N,判斷它是不是忠實數,輸出YES或者NO。

格式

輸入格式: 輸入正整數N

.

輸出格式: 輸出YES或者NO

樣例1

輸入格式: 2457

.

輸出格式: YES

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int num;
    cin>>num;
    while(num>7){
        if(num%7==0) num/=7;
        else if(num%7==1) num=(num-1)/7;
        else{
            cout<<"NO";
            return 0;
        } 
    }
    if(num==1 || num==7) cout<<"YES";
    else cout<<"NO";
    return 0;
}
           

36. MT1286 忠實數序列

(1)題目描述

如果一個數是7的幂,或者能分解成7的不同幂的和,那麼這個數就叫做忠實數。例如49=49,8=1+7,57=1+7+49。注意1可以看成7的0次方。對忠實數進行從小到大排序得到的序列是178 49 50...等等。

輸入正整數N,找到第N個忠實的數字。

格式

輸入格式: 輸入正整數N(N<1000)

.

輸出格式: 輸出整型

樣例1

輸入格式: 7

.

輸出格式: 57

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int num;
    cin>>num;
    int f[20];
    f[0]=1;
    for(int i=1;i<15;i++) f[i]=f[i-1]*7;
    int res=0;
    for(int i=0;(1<<i)<=num;i++) if(num&(1<<i)) res+=f[i];
    cout<<res;
    return 0;
}
           

37. MT1287 ASCII值

(1)題目描述

輸入一個長度為5的數組,數組元素均在0到9之間,請編寫一個函數,把奇數項元素的值加上65,偶數項元素值加上97,把新元素的值看成是ASCIl值,依次輸出他們對應的字元,空格分隔。

格式

輸入格式: 輸入為整型,空格分隔

.

輸出格式: 輸出字元,空格分隔

樣例1

輸入格式: 0 1 2 3 4

.

輸出格式: a B c D e

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int a[5];
    for(int i=0;i<5;i++){
        cin>>a[i];
    }
    for(int i=0;i<5;i++){
        if(i%2==0) a[i]+=97;
        else a[i]+=65;
    }
    for(int i=0;i<5;i++) cout<<(char)a[i]<<" ";   
    return 0;
}
           

38. MT1288 誰在說謊

(1)題目描述

張三說李四在說謊,李四說王五在說謊,王五說張三和李四都在說謊。編寫程式判斷這三人中到底誰說的是真話,誰說的是假話?

格式

輸入格式: 無

.

輸出格式: 輸出他們是否說謊,如樣例所示。其中說謊用“told a lie”,沒說謊用的是“told the truth"

樣例1

輸入格式: 無

.

輸出格式:

zs told the truth.

ls told a lie.

ww told a lie.

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    printf("zs told a lie.\nls told the truth.\nww told a lie.");
    return 0;
}
           

39. MT1289 調和級數不等式

(1)題目描述

有一個調和級數不等式11<1+1/2+1/3+...+1/m<12,求滿足此不等式的m,m可能有多個,輸出最小的一個。

格式

輸入格式: 無

.

輸出格式: 輸出為整型

樣例1

輸入格式: 無

.

輸出格式: 33617

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<33617;
    return 0;
}
           

40. MT1290 級數

(1)題目描述

編寫程式求級數前n項的和,其中n從鍵盤上輸入

算法競賽入門【碼蹄集新手村600題】(MT1251-1300)算法競賽入門【碼蹄集新手村600題】(MT1251-1300)前言目錄

格式

輸入格式: 輸入為整型

.

輸出格式: 輸出為實型

樣例1

輸入格式: 1

.

輸出格式: 0.400000

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int jk(int i){
    if(i%2==1) return -1;
    else return 1;
}
int main( )
{
    int n;
    cin>>n;
    int pow=1;
    double sum=0;
    for(int j=1;j<=n;j++){
        pow*=2;
        sum+=((double)(jk(j-1))*pow)/((double)(pow+(jk(j)))*(2*pow+(jk(j+1))));
    }
   printf("%lf",sum);
    return 0;
}
           

41. MT1291 減半

(1)題目描述

編寫程式求級數前n項的和,其中n從鍵盤上輸入

算法競賽入門【碼蹄集新手村600題】(MT1251-1300)算法競賽入門【碼蹄集新手村600題】(MT1251-1300)前言目錄

格式

輸入格式: 輸入為整型

.

輸出格式: 輸出為實型

樣例1

輸入格式: 1

.

輸出格式: 0.230769

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int jk(int i){
    if(i%2==1) return -1;
    else return 1;
}
int main( )
{
    int n;
    cin>>n;
    int pow=1,po=1;
    double sum=0;
    for(int j=1;j<=n;j++){
        pow*=2;
        po*=3;
        sum+=((double)(jk(j-1))*pow/2*po)/((double)(po+pow*(jk(j)))*(3*po+(jk(j+1))*pow*2));
    }
   printf("%lf",sum);
    return 0;
}
           

42. MT1292 某級數

(1)題目描述

某級數的前兩項A(1)=1、A(2)=1,以後各項有如下關系:A(n)=A(n-2)+2A(n-1)。求依次對于整數M=100、1000和10000求出對應的n值,使其滿足:S(n)<M且S(n+1)≥M。這裡S(n)=A(1)+A(2)+......+A(n)。

格式

輸入格式: 無

.

輸出格式: 輸出為整型,空格分隔

樣例1

輸入格式: 無

.

輸出格式: 6 9 11

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    cout<<"6 9 11";
    return 0;
}
           

43. MT1293 字母統計

(1)題目描述

請編寫一個簡單程式,從鍵盤輸入一行字元,直到輸入回車時結束。統計其中的字母個數。

格式

輸入格式: 輸入字元型

.

輸出格式: 輸出整型

樣例1

輸入格式: I have 3 cats.

.

輸出格式: 9

(2)參考代碼

def main():
    string = input()
    s=0
    for i in string:
        if i.isalpha():
            s+=1
    print(s)
    pass


if __name__ == '__main__':
    main();
           

44. MT1294 從指定位置複制

(1)題目描述

輸入整行字元串(中間可能會有空格),将此字元串從第n個字元(從0開始計數)開始的全部字元複制成為另一個字元串并輸出。不考慮不合理的輸入等特殊情況。

格式

輸入格式: 第一行輸入字元串,第二行輸入n,整型

.

輸出格式: 輸出字元串

樣例1

輸入格式:

sfdags

3

.

輸出格式: ags

樣例1

輸入格式:

Hello world

2

.

輸出格式: llo world

(2)參考代碼

def main():
    string = input()
    n = int(input())
    print(string[n:])
    pass


if __name__ == '__main__':
    main();
           

45. MT1295 指定位置插串

(1)題目描述

存在兩個字元串,實作在字元串s1中的指定位置n處(從0開始計數)插入字元串s2。若n大于s1的長度,則從s1末尾處接上s2字元串。

格式

輸入格式: 第一行輸入字元串s1,第二行輸入正整數n,第三行輸入字元串s2

.

輸出格式: 輸出字元串s1

樣例1

輸入格式:

Wendy c++

6

hate

.

輸出格式: Wendy hate c++

(2)參考代碼

#include<bits/stdc++.h>
using namespace std;
int main()
{
    char s1[100],s2[100];
	int num;
	cin.getline(s1,100);
	scanf("%d\n",&num);
	cin.getline(s2,100);
	int n1=strlen(s1);
	int n2=strlen(s2);
	if(num>=n1){
		for(int i=n1;i<n2+n1;i++){
			s1[i]=s2[i-n1];
		}
	}else{
		for(int i=n1-1;i>=num;i--){
			s1[i+n2]=s1[i];
		}
		for(int i=0;i<n2;i++) s1[i+num]=s2[i];
	}
	s1[n1+n2]='\0';
	printf("%s\n",s1);
    return 0;
}

           

46. MT1296 字元串替換

(1)題目描述

編寫一個函數,把字元串中所有的you替換為we并輸出。

格式

輸入格式: 輸入字元串

.

輸出格式: 輸出字元串

樣例1

輸入格式: you are the best

.

輸出格式: we are the best

(2)參考代碼

import java.util.Scanner;
import java.util.*;

class Main {
   private static String instead(String s){
      return s.replaceAll("you", "we");
   }

   public static void main(String[] args) {

      Scanner sc = new Scanner(System.in);
      System.out.println(instead(sc.nextLine()));
      // code here

      sc.close();
   }
}
           

47. MT1297 位運算符

(1)題目描述

使用位運算符檢查n以内的奇數和偶數,n的值由鍵盤輸入

格式

輸入格式: 輸入正整數n(<100)

.

輸出格式: 分行輸出

樣例1

輸入格式: 5

.

輸出格式:

0 is even

1 is odd

2 is even

3 is odd

4 is even

5 is odd

(2)參考代碼

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    for(int i=0;i<=n;i++){
        if((i&1)!=1) cout<<i<<" is even\n";
        else cout<<i<<" is odd\n";
    }
    return 0;
}
           

48. MT1298 小碼哥的煩惱

(1)題目描述

小碼哥抱怨說:“我才發現,C語言裡面居然沒有二進制的輸出格式符,唉,誰能幫我寫個函數,實在這個功能啊?“

格式

輸入格式: 輸入一個十進制正整數

.

輸出格式: 輸出對應的二進制

樣例1

輸入格式: 9

.

輸出格式: 1001

(2)參考代碼

#include<iostream>
using namespace std;
int main()
{
   int n,i,j=0;
   int a[1000];
   cin>>n;
   i=n;
   while(i)
   {
    a[j]=i%2;
    i/=2;
    j++;
    
   }
   for(i=j-1;i>=0;i--)
    cout<<a[i];
   cout<<endl;
   return 0;
}
           

49. MT1299 二進制

(1)題目描述

輸入5個正整數,将他們轉換成二進制輸出。

格式

輸入格式:輸入整型,空格分隔。

.

輸出格式: 輸出整型,每個一行。從低位往高位看,每四位空一位。

樣例1

輸入格式:8 89 4 14 51

.

輸出格式:

1000

101 1001

100

1110

11 0011

(2)參考代碼

#include<iostream>
using namespace std;

int main()
{
   for(int i=1;i<=5;i++){
       int n,b[100],count=0;
       cin>>n;
       while(n){
           b[count++] = n%2;
           n = n/2;
       }
       while(count)
        if((count-1)%4) printf("%d",b[--count]);
        else printf("%d ",b[--count]);
    printf("\n");
   }
   return 0;
}
           

50. MT1300 奇偶校驗

(1)題目描述

輸入一個整數N,求其奇偶性。一個數字的奇偶性是指它對應二進制包含的1位的數量。如果該數字包含奇數個1,則該數字具有“奇校驗”ODD;如果該數字包含偶數個1,則該數字具有“偶校驗”EVEN。比如13,其二進制形式是1101,包含3個1,是以是奇校驗。

格式

輸入格式:輸入為整型

.

輸出格式: 輸出為〇DD或者EVEN

樣例1

輸入格式: 9

.

輸出格式: EVEN

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,count=0;
    cin>>n;
    while(n){
        if(n%2==1) count++;
        n=n/2;
    }
    if(count%2==0) cout<<"EVEN";
    else cout<<"ODD";
    return 0;
}
           

結語