1. 程式人生 > >2016年第四屆湘潭大學新生趣味程式設計競賽 題解

2016年第四屆湘潭大學新生趣味程式設計競賽 題解

Age

Accepted : 932 Submit : 2426
Time Limit : 1000 MS Memory Limit : 65536 KB 

Age

題目描述

今年是2016年,一個年齡小於99歲(出生當年為0歲)的人,把出生年份的前兩位和後兩位相加得到一個整數n。你能根據n,算出他有多少歲嗎?

輸入

第一行輸入一個整數T(1T99),表示樣例的個數。 每行輸入一個整數n

輸出

每行輸出一個樣例的結果。

樣例輸入

2
20
118

樣例輸出

16
17

樣例解釋

第1樣例,此人生於2000年;第2樣例,此人生於1999年。

#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
int main(){
    int t;
    scanf("%d",&t);
    int n;
    while(t--){
        scanf("%d",&n);
        int i;
        for(i=2016-98;i<=2016;i++){
            
            if((i%100)+(i/100)==n){
                printf("%d\n",2016-i);
                break;
            }
        }
    }
    return 0;
}

Balance

Accepted : 195 Submit : 964
Time Limit : 1000 MS Memory Limit : 65536 KB 

Balance

題目描述

小明有一架天平,小明想稱出1n克的物品,請問最少需要幾顆砝碼?
比如小明想稱出14克的物品,需要2顆砝碼,為1和3克。

balance

輸入

第一行是一個整數T(1T10000),表示樣例的個數。 以後每行一個樣例,為一個整數 (1n109)。

輸出

每行輸出一個樣例的結果。

樣例輸入

3
1
4
40

樣例輸出

1
2
4
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
const int maxn = 30;
pair<int, int> save[maxn];
int main(){
    int t,i,p;
    p = -1;
    for(i=0;i<=30;i++){
        save[++p].first = (pow(3,i)+1)/2;
        save[p].second = (pow(3,i+1)-1)/2;
    }
    scanf("%d",&t);
    int n;
    while(t--){
        scanf("%d",&n);
        for(i=0;i<30;i++){
            if(n>=save[i].first&&n<=save[i].second){
                printf("%d\n",i+1);
                break;
            }
        }
    }
    return 0;
}

Clock

Accepted : 346 Submit : 2164
Time Limit : 1000 MS Memory Limit : 65536 KB 

Clock

題目描述

鐘的一圈是12小時,其中時針、分鐘都是勻速移動。一天從00:00~23:59,請問某一時刻,時針與分針的夾角是多少?

Clock

輸入

第一行是一個整數T(1T1440),表示樣例的個數。 以後每行是一個時刻,格式為HH:MM。

輸出

每行輸出一個樣例的結果,如果結果不是整數,小數部分不要輸出多餘的0。

樣例輸入

2
00:01
00:30

樣例輸出

5.5
165

#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
int main(){
    int t;
    scanf("%d",&t);
    int n;
    string in;
    while(t--){
        int i,j;
        cin>>in;
        double hour=0.0,min=0.0;
        int len = in.length();
        hour = (double)(in[0]-'0')*10.0 + (double)(in[1]-'0');
        if(hour>12){
            hour -= 12;
        }
        min = (double)(in[3]-'0')*10.0 + (double)(in[4]-'0');
        
        min = min*6;
        hour  = (hour*30) + min/360*30;
        //cout<<min(abs(hour-min),360.0-(abs(min-hour)));
        printf("%g\n",abs(hour-min)<360.0-(abs(min-hour))?abs(hour-min):360.0-(abs(min-hour)));
    }
    return 0;
}

Different Digits

Accepted : 208 Submit : 1015
Time Limit : 1000 MS Memory Limit : 65536 KB 

Different Digits

題目描述

有一個n位數x,每個數碼都不一樣,可你知道x的後m(m<n)位構成的整數x,請問滿足條件最小的x是多少?

輸入

第一行是一個整數T(1T1000),表示樣例的個數。 每個樣例一行,為兩個整數n(2n10)x的後m位的整數x(0x<987654321,x0)

輸出

每行輸出一個樣例的結果。

樣例輸入

2
3 12
4 12

樣例輸出

312
3012

#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <cstring>
using namespace std;

const int maxn = 1010;
const int INF = 0x3f3f3f3f;
int save[maxn];
bool vis[10];
int main(){
    int t,i,j,n;
    string in;
    string res;
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n);
        cin>>in;
        int m = in.length();
        memset(vis, true, sizeof(vis));
        for(i=0;i<in.length();i++){
            vis[in[i]-'0'] = false;
        }
        for(i=0;i<in.length();i++){
            res[i+n-m] = in[i];
            
        }
        for(i=1;i<=9;i++){
            if(vis[i]){
                res[0] = i+'0';
                vis[i] = false;
                break;
            }
        }
        int p = 1;
        for(i=0;i<=9;i++){
            if(p==n-m){
                break;
            }
            if(vis[i]){
                res[p] = i+'0';
                
                p++;
            }
        }
        for(i=0;i<n;i++){
            cout<<res[i];
        }
        printf("\n");
    }
    return 0;
}

Estrella's Travel

Accepted : 100 Submit : 258
Time Limit : 1000 MS Memory Limit : 65536 KB 

Estrella's Travel

題目描述

Estrella喜歡旅行,她準備去自己心儀的城市看風景。她精心選擇了一條線路,準備自駕遊。自駕線路是一條鏈路,上有n+1座城市,編號依次為0n,Estrella住在0號城市,目的地是n號城市。Estrella為了環保,駕駛了一輛純電動車,所以最多隻能一次行駛m個城市的距離。如果Estrella在某個城市(包括n號城市)停留,自然會需要一些費用,當然每個城市的花費是不一樣,Estrella想知道,這個花費最小是多少?

輸入

多組資料輸入。
每組資料第一行兩個整數n(1<n<1000),m(1m<n)
第二行n個整數ai(0<ai1000),表示編號為1,2,,n的城市的停留花費。

輸出

對於每個資料,輸出一行,表示總的花費。

樣例輸入

5 2
1 2 3 4 5
6 2
6 5 4 3 2 1

樣例輸出

9
9

樣例解釋

第1個樣例,依次到城市1,3,5,所以花費為1+3+5=9;
第2個樣例,依次到城市2,4,6,所以花費為5+3+1=9。

#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <cstring>
using namespace std;
int n,m;
const int maxn = 1010;
const int INF = 0x3f3f3f3f;
int save[maxn];
int dp[maxn];
int main(){
    int t,i,j;
    while(~scanf("%d%d",&n,&m)){
        for(i=1;i<=n;i++){
            scanf("%d",&save[i]);
        }
        dp[0] = 0;
        for(i=1;i<=n;i++){
            int now = INF;
            if(i>=m){
                for(j=i-m;j<i;j++){
                    
                    now = min(now,dp[j]);
                }
                
                dp[i] = now + save[i];
            }else{
                for(j=0;j<i;j++){
                    now = min(now,dp[j]);
                }
                
                dp[i] = now + save[i];
            }
        }
        
        cout<<dp[n]<<endl;
    }
    return 0;
}

Finally,Which light is on?

Accepted : 225 Submit : 1026
Time Limit : 1000 MS Memory Limit : 65536 KB 

Finally, which light is on?

題目描述

有n盞燈,編號1~n。一開始燈都是關著的,每個燈有一個開關,按奇數次為開啟,按偶數次為關閉。我們先把編號為1的倍數的燈按一下開關,再把編號為2的倍數的燈按一下開關,依次下去,一直到把編號為n的倍數燈按一下,請問最後有多少盞燈是亮的?

lamp

輸入

第一行是一個整數T(1T10000),表示樣例的個數。 以後的每行一個樣例,為一個整數n(1n109)

輸出

每行輸出一個樣例的結果。

樣例輸入

2
1
5

樣例輸出

1
2

樣例解釋

第2個樣例,先把1~5都開啟;然後把2,4關掉;然後把3關掉;然後把4開啟;然後把5關掉;所以,最後剩1和4是亮著的。


#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
int n,m;
const int maxn = 31630;
const int INF = 0x3f3f3f3f;
long long save[maxn];
int main(){
    //cout<<sqrt(1000000000)<<endl;
    int t,i,j;
    scanf("%d",&t);
    int  p = 0;
    for(i=1;i<=31623;i++){
        save[++p] = i*i;
        //cout<<save[p]<<endl;
    }
    while(t--){
        scanf("%d",&n);
        if(n==1){
            printf("1\n");
            continue;
        }
        for(i=1;i<=n;i++){
            //cout<<save[i]<<" ";
            if(save[i]>n){
                printf("%d\n",i-1);
                break;
            }
        }
    }
    return 0;
}

Gemstone Bracelet

Accepted : 207Submit : 741
Time Limit : 1000 MSMemory Limit : 65536 KB 

Gemstone Bracelet

題目描述

mumuchacha是一個愛美的小姑娘,她有一條漂亮的寶石手鍊,寶石手鍊上有N個不同的寶石,每一顆寶石都有它特定的魅力值。

mumuchacha每天都把手鍊戴在手上,她很喜歡擡起手來看她的手鍊,但是每次都只能看到一部分(M個寶石),因為還有一部分被手臂擋住了,所以她不斷的旋轉手鍊,每次轉動一顆寶石,使每次看到的寶石都不同,求mumuchacha每次旋轉後看到的寶石魅力值之和的最大值。

輸入

有多個樣例,輸入的第一行是樣例個數T
每個樣例的第一行是兩個整數nm(1mn100000)
第二行是n個整數ai,表示n個寶石的魅力值(1ai10000)

輸出

每行輸出一個整數,即魅力值和的最大值

樣例輸入

2
5 3
1 2 3 4 5
10 4
6 7 4 5 8 4 2 5 9 4

樣例輸出

12
26

#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
int n,m;
const int maxn = 100000;
const int INF = 0x3f3f3f3f;
int save[maxn];
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        int i,j;
        scanf("%d%d",&n,&m);
        for(i=0;i<n;i++){
            scanf("%d",&save[i]);
        }
        int now = 0,res = 0;
        for(i=0;i<m;i++){
            now += save[i];
        }
        res = now;
        
        for(i=1;i<n;i++){
            
            now += save[(i+m-1)%n];
            now -= save[(n+(i-1))%n];
            res = max(res,now);
        }
        printf("%d\n",res);
    }
    return 0;
}



相關推薦

2016湘潭大學新生趣味程式設計競賽 題解

Age Accepted : 932 Submit : 2426 Time Limit : 1000 MS Memory Limit : 65536 KB  Age 題目描述 今年是2016年,一個年齡小於99歲(出生當年為0歲)的人,把出生年份的前兩位和後兩位相加得到一個整數n。

2016藍橋杯C/C++程式設計本科B組省賽 平方和(程式設計大題)

2016年第七屆藍橋杯C/C++程式設計本科B組省賽題目彙總: 四平方和 四平方和定理,又稱為拉格朗日定理: 每個正整數都可以表示為至多4個正整數的平方和。 如果把0包括進去,就正好可以表示為

2016藍橋杯C/C++程式設計本科B組省賽 生日蠟燭(結果填空)

2016年第七屆藍橋杯C/C++程式設計本科B組省賽題目彙總: 生日蠟燭 某君從某年開始每年都舉辦一次生日party,並且每次都要吹熄與年齡相同根數的蠟燭。 現在算起來,他一共吹熄了236根蠟燭

2016藍橋杯C/C++程式設計本科B組省賽 剪郵票(結果填空)

2016年第七屆藍橋杯C/C++程式設計本科B組省賽題目彙總: 剪郵票 如【圖1.jpg】, 有12張連在一起的12生肖的郵票。 現在你要從中剪下5張來,要求必須是連著的。 (僅僅連線一個角不

2016藍橋杯C/C++程式設計本科B組省賽 煤球數目(結果填空)

煤球數目有一堆煤球,堆成三角稜錐形。具體:第一層放1個,第二層3個(排列成三角形),第三層6個(排列成三角形),第四層10個(排列成三角形),....如果一共有100層,共有多少個煤球?請填表示煤球總數

2016藍橋杯C/C++程式設計本科B組省賽 湊算式(結果填空) DFS

//A + B/C + DEF/GHI = 10 湊算式 標記一下1-9個數,再搜尋一下就好了#include <iostream> using namespace std; bool visited[10]; int ans[100]; int k = 0; i

[藍橋杯][2013真題]買不到的數目

題目描述 小明開了一家糖果店。他別出心裁:把水果糖包成4顆一包和7顆一包的兩種。糖果不能拆包賣。 小朋友來買糖的時候,他就用這兩種包裝來組合。當然有些糖果數目是無法組合出來的,比如要買 10 顆糖。 你可以用計算機測試一下,在這種包裝情況下,最大不能買到的數量是17。大於17的任何數字都

[藍橋杯][2013真題]危險係數

問題描述 抗日戰爭時期,冀中平原的地道戰曾發揮重要作用。 地道的多個站點間有通道連線,形成了龐大的網路。但也有隱患,當敵人發現了某個站點後,其它站點間可能因此會失去聯絡。 我們來定義一個危險係數DF(x,y): 對於兩個站點x和y (x != y), 如果能找到一個站點z,當z被敵人破壞後,

2016藍橋杯

交換瓶子有N個瓶子,編號 1 ~ N,放在架子上。比如有5個瓶子:2 1 3 5 4要求每次拿起2個瓶子,交換它們的位置。經過若干次後,使得瓶子的序號為:1 2 3 4 5對於這麼簡單的情況,顯然,至少需要交換2次就可以復位。如果瓶子更多呢?你可以通過程式設計來解決。輸入格式

2016藍橋杯省賽A組試題

2016年第七屆藍橋杯省賽(C/C++) A組試題及參考答案 第七屆藍橋杯省賽結束了,趁著還有點印象,趕緊把答案記一下。 歡迎加入à程式設計學習交流QQ群:23228338,一起交流藍橋杯答案及程式設計交流學習。群檔案有答案下載 1.父親和兒子(列舉) 父親的年齡兩個數字

2016藍橋杯決賽心得

這次比賽,成績並不是太理想,雖然我是一個渣二本(河南農業大學,一聽,種地的還學程式設計???),卻金剛不可奪其志,毅然決然的報了A組C,學院不支援,最後倔著脾氣自費報名了。省賽順利通過,可是決賽只拿了一個國三。想想要總結一下這次的得失,可是感覺我應該從頭分析一下

2016藍橋杯試題(C/C++本科B組)

3.湊算式      B      DEF A + --- + ------- = 10      C      GHI       (如果顯示有問題,可以參見【圖1.jpg】)   這個算式中A~I代表1~9的數字,不同的字母代表不同的數字。 比如: 6+8/3+952/

藍橋杯20167省賽

結果填空 煤球數目 有一堆煤球,堆成三角稜錐形。具體: 第一層放1個, 第二層3個(排列成三角形), 第三層6個(排列成三角形), 第四層10個(排列成三角形), …. 如果一共有100層,共有多少個煤球? 171700 public

2013藍橋杯試題(Java本科B組)

1.標題: 世紀末的星期 曾有邪教稱1999年12月31日是世界末日。當然該謠言已經不攻自破。 還有人稱今後的某個世紀末的12月31日,如果是星期一則會.... 有趣的是,任何一個世紀末的年份的12月31日都不可能是星期一!!  於是,“謠言製造商”又修改為星期日....

2016藍橋杯省賽(C/C++ A組)

此處有目錄↑ 基本都是暴力搜尋解決,最後兩道演算法題不會 - - 1.父親和兒子 (列舉) 父親年齡是兩位數,且比兒子大27歲,問有多少種可能的情況?(父親30歲,兒子3歲也符合題意) 直接列舉父親年齡即可 答案是:7 #include <cstdio

2016藍橋杯省賽C /C++ A組 1~8題題解

部分轉載自:http://blog.csdn.net/idealism_xxm/article/details/50937688還有:http://blog.csdn.net/summonlight/article/details/61427968題目連線:http://ww

2013藍橋杯試題(C/C++本科B組)

1 大數學家高斯有個好習慣:無論如何都要記日記。     他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210     後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒著主人:日子又過去一天,

煤球數目(2016藍橋杯c/c++省賽B組(1題))

第一題 :煤球數目 題目敘述: 有一堆煤球,堆成三角稜錐形。具體: 第一層放1個, 第二層3個(排列成三角形), 第三層6個(排列成三角形), 第四層10個(排列成三角形), …. 如果

藍橋杯2016決賽C_C++程式設計本科B組

1.一步之遙 從昏迷中醒來,小明發現自己被關在X星球的廢礦車裡。 礦車停在平直的廢棄的軌道上。 他的面前是兩個按鈕,分別寫著“F”和“B”。 小明突然記起來,這兩個按鈕可以控制礦車在軌道上前進和後退。 按F,會前進97米。按B會後退127米。

2013藍橋杯省賽C++B組——1、高斯日記

題目標題: 高斯日記    大數學家高斯有個好習慣:無論如何都要記日記。    他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210    後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒著主人: