【解題報告】洛谷-蒟蒻團隊邀請賽-六月月賽
阿新 • • 發佈:2019-02-01
前言
話說這次把最後一題想難了搞得沒有一次性。。。
話說倒數第二題用會,果斷用了就了。。。
連結
正題
第一題 大佬買酒
大意
給定一些固定數值的貨幣,現在有元,在儘量用面值高的貨幣的情況下,每種貨幣會用多少張?
思路
一個裸的貪心+模擬,一些基礎的運算就可以了
先依次除去大的紙幣的面值,在用餘數繼續除,計算的結果即為紙幣的張數
(當然也能暴力模擬)
程式碼
#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);//輸出
}
第二題
大意
給定一個長度為的二進位制數,將其轉換為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");//努力奮鬥二十年都買不到。。。
}
第四題
大意
給定兩個數,比較其大小
思路
這道題的輸出很詭異,和,這樣看還能看出來,但題目裡邊是這樣的,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);//若完全相等
}
第五題
大意
在一個的矩陣中有些格子上有一些數字,輸出每個數字對應占領的格子數
思路
開一個桶,儲存答案,然後直接輸出
程式碼
#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]);//輸出
}