1. 程式人生 > >1111我和程式有個約會

1111我和程式有個約會

5604: Kannyi列印模板 分享至QQ空間

時間限制(普通/Java):1000MS/3000MS     記憶體限制:65536KByte
總提交: 143            測試通過:35

描述

 

Kannyi要去瀋陽參加比賽,賽前要用5106的印表機打一份模板以便賽場上使用。

奈何機房印表機出了點問題,雙面列印總是不能很好完成,印表機會打印出偶數面,但是中間會夾雜白紙類似的情況,按理說他只要把它再放進去就好了,但是現在他要手動列印避免錯誤。他選擇分段進行列印,BobHuang說那讓我用程式碼給你生成吧。請你寫一份和BobHuang一樣的程式碼。

比如這個份模板5頁,偶數頁已經列印並整理好了,他需要把這三頁一起列印,輸出1,3,5就好了。

 

 

輸入

 

 

輸入資料包含多個測試例項,每個測試例項佔一行,為這份模板的頁數n和分成的段k。

多組資料以n=0,k=0結束。

 

 

輸出

 

 

每個樣例輸出第一行為Case x:

然後輸出為k行,第i行為第i段當要列印的頁數,相鄰兩頁用","隔開。

 

樣例輸入

5 1
6 2
20 3
0 0

樣例輸出

Case 1:
1,3,5
Case 2:
1,3
5
Case 3:
1,3,5,7
9,11,13,15
17,19

這個其實就是迴圈模擬題,模擬出來一行需要列印的就好。

這裡資料出了鍋,卡了chengyu的做法,不好意思啊。

#include<stdio.h>
int main()
{
    int n,k,ca=0;
    while(scanf("%d%d",&n,&k),n||k)
    {
        int s=((n+1)/2+k-1)/k,f=0
,i; printf("Case %d:\n",++ca); for(i=1; i<=n; i+=2) { if(f!=s-1&&i!=n&&i!=n-1)printf("%d,",i),f++;//不是最後一個數or不到換行 else printf("%d\n",i),f=0; } } return 0; }

這裡還有一份驗題組的程式碼

#include<stdio.h>
int main()
{
    int n,k,i,m=1,r,t,j;
    while(scanf("%d %d",&n,&k),n||k)
    {
        printf("Case %d:\n",m++);
        if(n%2==0)
        {
            r=n/2;
            n--;
        }
        else
            r=n/2+1;
        if(r%k==0)
            r=r/k;
        else
            r=r/k+1;
        j=0;
        for(i=1; i<=n; i+=2)
        {
            if(!j)
                printf("%d",i);
            else
                printf(",%d",i);
            j++;
            if(j==r)
            {
                printf("\n");
                j=0;
            }
        }
        if(j)
            printf("\n");
    }
    return 0;
}

5605: 祝crq生日快樂 分享至QQ空間

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 184            Accepted:164

Description

 

 

2008-2018 TOJ已經走過了10年,這10年的故事有些我們不能知道,有些在2018年校賽的演講稿可以看到當你有改變世界能力時,請做一個良... 

不管你做不做ACM,每個計算機系同學都面臨著一個問題,就是進行程式設計,從C語言到C++,再到C#、Java,再到彙編、PHP,你離不開的就是程式設計。crq對於程式設計的熱愛,我認為是高過每一個人的。你對他反映TOJ的不僅限於題目問題,往往都會第一時間解答。C語言的入門也是一個十分頭疼的問題,但是crq會帶著大家一同走過那段艱難的行程。每年開學初他都會投入大量的經歷到C語言的入門中去,很多同學都是他投入時間的受益者。甚至你可以和他聊些自己的私事,他也會幫你排憂解難滿,著實一個熱心腸。我相信除了我,不少同學也受益過,但是毫無疑問我們剝奪了他休息的時間,即使他幫助別人也獲得了快樂。

在參加演算法競賽的時間裡,我意識到了自己投入時間去學習才是最重要的,自己要踏踏實實的,一步一個腳印,往往才是學習最行之有效的方法。所以在這個投入和產出不一定成正比的競賽中,興趣是重要的。你可以很菜,但是你需要保持一顆永遠向上的心。crq在這個競賽中也投入了很多時間和精力,很多出色的畢業生都是玩這個的,和他悉心澆灌ACM這塊土地是分不開的。

我們不需要歌功頌德,對於這些老師們來講,他們最大的幸福就是看著我們在所學專業有所收穫。以上也純粹為學長的叨叨,也希望各位老師可以天天開心,各位同學可以快樂地度過自己的大學生活。

11月11日不僅是購物狂歡節,也是crq的生日,請為他送上生日祝福。

 

 

Input

 

 

本題沒有輸入。

 

 

Output

 

 

請輸出"Happy Birthday!"(不包含引號)。

 

 

Sample Input

 

Sample Output

Happy Birthday!

真的是純粹學長想說的話,輸出就行啦,一起祝老師生日快樂

#include<stdio.h>
int main()
{
    printf("Happy Birthday!");
    return 0;
}

5606: taozi的小難題 分享至QQ空間

Time Limit(Common/Java):500MS/1500MS     Memory Limit:65536KByte
Total Submit: 164            Accepted:18

Description

 

 

從前有一個摳門的國王taozi,一天他的領土受到了其它國家的侵略,於是taozi決定組建一個騎士團擊退敵人。當然招募騎士也是需要花費金幣的,這裡就以騎士的攻擊力來給金幣,摳門的taozi看到了這麼多騎士前來,很頭痛,於是taozi找到了聰明的你,讓你去幫他解決這個問題。

 

 

Input

 

 

輸入多組資料,對於每組資料,第一行輸入一個n,m,分別代表n個敵人和m個騎士,接下來n個數代表敵人的攻擊力a,然後m個數代表僱傭騎士的攻擊力b,多組資料以n=0,m=0結束。
資料規定

1≤n,m≤10000

1≤a,b≤100

 

 

Output

 

 

對於每組資料,輸出國王最少需要花費多少金幣僱傭騎士才能殺死所有敵人,如果不行輸出-1。

 

 

Sample Input

2 3
5 4
7 8 4
2 1
5 5
10
0 0

Sample Output

11
-1

Hint

第一組資料,taozi選擇第3號騎士打敗2號敵人,選擇第1號騎士打敗1號敵人,總共花費11元。

第二組資料,taozi無論怎麼選都打不過敵人。

這個題目本來是sort,但是

 因為攻擊力最多100 ,所以開始開兩個100的陣列 ,然後100^2完事 
#include<stdio.h>

int main()
{
    int i,j,k,n,m,x;
    while(scanf("%d%d",&n,&m)!=EOF,n||m)
    {
        int a[105]={0},b[105]={0};
        for(i=0;i<n;i++)
        {
            scanf("%d",&x);
            a[x]++;
        }
        for(i=0;i<m;i++)
        {
            scanf("%d",&x);
            b[x]++;
        }
        int sum=0,f=1;
        for(i=1;i<=100;i++)
        {
            for(j=1;j<=a[i];j++)
            {
                f=0;
                for(k=i;k<=100;k++)
                {
                    if(b[k]>0)
                    {
                        b[k]--;
                        sum+=k;
                        f=1;
                        break;
                    }
                }
                if(f==0)break;
            }
            if(f==0)break;
        }
        if(f==0)printf("-1\n");
        else printf("%d\n",sum);
    }
    return 0;
}

 

5607: taozi的簽到題 分享至QQ空間

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 637            Accepted:75

Description

 

 

題目很簡單,就是求1到n中能被2或3或6或8整除的數有幾個。

 

 

Input

 

 

多組輸入,每行輸入一個正整數n(n<=1000000),以n為0結束(組數在10000左右)。

 

 

Output

 

 

輸出1到n中能被2或3或6或8整除的數的個數。

 

 

Sample Input

10
0

Sample Output

7

查詢比較多,所以大家瘋狂wa

我們可以理智分析下,是8的倍數一定是2的倍數,6的倍數一定是2和3的倍數

所以所求就是2的倍數個數-3的倍數個數+6的倍數個數

#include<stdio.h>
int main()
{
    int n;
    while(scanf("%d",&n),n)printf("%d\n",n/2+n/3-n/6);
    return 0;
}

或者預處理,預處理就是提前處理出答案,下一次還在上一次的基礎上進行判斷

#include <stdio.h>
#define N 1000005
int a[N];
int main()
{
    int n,i;
    for(i=1;i<N;i++)
    {
        a[i]=a[i-1];
        if(i%2==0||i%3==0||i%6==0||i%8==0) a[i]++;
    }
    while(scanf("%d",&n),n)printf("%d\n",a[n]);
    return 0;
}

5608: 單身狗沙漠逃生 分享至QQ空間

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 20            Accepted:5

Description

 

 

1111是個有趣的節日,某單身狗沒錢可花,沒事可做。

1541401467161087125.png

沙漠裡有一條很長的公路,單身狗想沿著公路進沙漠去探險。每走x公里路後,單身狗就要消耗x份食物(x為大於0的分數)。單身狗共準備了n份食物,但他身上最多揹負m份食物(n%m為0,而且n/m<11)。如果食物可以在路邊存放,為保證能原路返回出發點,單身狗最遠能進入沙漠多少公里?

 

 

Input

 

 

輸入資料包含多個測試例項,每個測試例項佔一行,為這份食物份數n和最多揹負的食物數m。(n<1111)

多組資料以n=0,m=0結束。

 

 

Output

 

 

每組資料輸出一行,代表單身最多進入沙漠的總公里數,為一最簡分數,即分子和分母互質。

 

 

Sample Input

600 120
1 1
0 0

Sample Output

137/1
1/2

Hint

 

這是一個極端構造的問題,我們可以嘗試去構造極端條件並求解。

由於單身狗每次只能揹負120份食物,故他要從出發點出發5次。
每次出發走一段距離後,就將食物放在路邊做補充,然後返回出發點揹負食物。 

但是這個距離要走幾次是固定的,比如第一段路就要走10 次,第二段路要走8次,第三段路要走6次,第四段路要走4次,第五次路要走2次。但是每段路的消耗的食物數和是固定的,均為120份。

所以距離為120/10+120/8+120/6+120/4+120/2=137。

所以題目變為了分數加法(霧)?好人做到底,偷偷告訴你,1~10的最小公倍數為2520。

這個題目害怕大家想不到做法,所以提示裡題解了一波。

其實就是第一段路要走2*(n/k)次,消耗k份食物...最後一段路走2次,消耗k份食物。

合併同類項藉助2050的做法

#include<stdio.h>
int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}
int main()
{
    int n,k;
    while(scanf("%d%d",&n,&k),n||k)
    {
        int a=0,b=2*2520,i;
        for(i=1;i<=n/k;i++)a+=k*2520/i;
        int t=gcd(a,b);
        printf("%d/%d\n",a/t,b/t);
    }
}

分數加法的做法

#include<stdio.h>
int a,b;
int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}
int d()
{
    int t=gcd(a,b);
    a/=t,b/=t;
}
int main()
{
    int n,m,i;
    while(~scanf("%d%d",&n,&m),n,m)
    {
        a=m,b=2;
        for(i=2; i<=n/m; ++i)a=2*a*i+m*b,b*=2*i,d();
        printf("%d/%d\n",a,b);
    }
}