1. 程式人生 > >【解題報告】洛谷-蒟蒻團隊邀請賽-六月月賽

【解題報告】洛谷-蒟蒻團隊邀請賽-六月月賽

前言

話說這次把最後一題想難了搞得沒有一次性AK。。。
話說倒數第二題用getswa,果斷用了scanfA了。。。

連結

正題

第一題 大佬買酒

大意

給定一些固定數值的貨幣,現在有N元,在儘量用面值高的貨幣的情況下,每種貨幣會用多少張?

思路

一個裸的貪心+模擬,一些基礎的運算就可以了
先依次除去大的紙幣的面值,在用餘數繼續除,計算的結果即為紙幣的張數
(當然也能暴力模擬)

程式碼

#include<cstdio>
using namespace std;long long n;
int main()
{
    scanf("%lld
"
,&n);//輸入 printf("%lld\n%lld\n%lld\n%lld\n%lld\n%lld",n/100,(n%100)/50,((n%100)%50)/20,(((n%100)%50)%20)/10,((((n%100)%50)%20)%10)/5,((((n%100)%50)%20)%10)%5);//輸出 }

第二題

大意

給定一個長度為n的二進位制數,將其轉換為10進位制

思路

樸素的想法是直接用一個數組,但是這樣空間複雜度較高,其實可以用兩個變數代替,然後邊輸入邊做

程式碼

#include<cstdio>
using namespace std;char c;long long
s,a=1;int n; int main() { scanf("%d\n",&n);for(int i=1;i<n;i++) a<<=1;//求出2的n次方 while(n--) { c=getchar();//輸入 if(c==49) s+=a;//如果是1加上去 a>>=1;//每次往右移 } printf("%lld",s);//輸出 }

第三題

大意

不想解釋。。。
給定年薪和房價增長率,房價初始為200萬元,求第幾年可以買下這套房

思路

暴力模擬

程式碼

#include<cstdio>
using namespace std;double now;int n,k,s;
int main()
{
    scanf("%d%d",&n,&k);now=200;s=n;
    for(int i=1;i<=20;i++)//規定只有20年
    {
        if(s>=now) {printf("%d",i);return 0;}//我買的下啦!
        now*=1+k/100.0;//我漲房價
        s+=n;//我領年薪
    }
    puts("IMP0SSIBLE");//努力奮鬥二十年都買不到。。。
}

第四題

大意

給定兩個數,比較其大小

思路

這道題的輸出很詭異,YE5N0,這樣看還能看出來,但題目裡邊是這樣的,YE5,N0,被坑死了。。。
然後這道題資料有點大,用陣列比較就行了

程式碼

#include<cstdio>
#include<cstring>
#define prf(x) {printf(#x);putchar(10);return 0;}//輸出某字串並換行
using namespace std;char c1[1001],c2[1001];
int main()
{
    scanf("%s%s",c1,c2);
    if(strlen(c1)>strlen(c2)) prf(YE5);
    if(strlen(c1)<strlen(c2)) prf(N0);//小學數學,誰位數多誰更大
    for(int i=0;i<strlen(c1);i++) if(c1[i]>c2[i]) prf(YE5) else if(c1[i]<c2[i]) prf(N0);//比較每一位
    prf(The Same);//若完全相等
}

第五題

大意

在一個n×n的矩陣中有些格子上有一些數字,輸出每個數字對應占領的格子數

思路

開一個桶,儲存答案,然後直接輸出

程式碼

#include<cstdio>
using namespace std;
int a[9],n,c;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
     for(int j=1;j<=n;j++)
      {
        scanf("%d",&c);
        a[c]++;//存進桶
      }
    for(int i=1;i<9;i++) printf("%d ",a[i]);//輸出
}