2018.10.17學校前兩題題解(後兩題還沒改出來)
阿新 • • 發佈:2018-12-16
第一題:
第一題的輸入卡了我好久!!本來想用scanf的,但是發現沒有打出字元個數,不知道輸入多少個字元,c++又不能用字串……開了個gets(),結果因為linux的換行符不一樣,爆零了…… 先用a陣列存好每一個字母所需要點選的次數,如果ch[i]是空格,就ans++,否則用ans+=a[ch[i]](ch是字元陣列)。 P.S.我的輸出還是沒有搞好,翻譯成pascal就對了。
程式碼:
var a:array['a'..'z'] of longint=(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4); i,j,ans:longint; s:string; begin assign(input,'mobile.in');reset(input); assign(output,'mobile.out');rewrite(output); readln(s); for i:=1 to length(s) do begin if s[i]=' ' then inc(ans) else inc(ans,a[s[i]]); end; write(ans); close(input);close(output); end.
還是Pascal好,沒有這麼多輸入方式
第二題:
第二題其實很簡單。 ai為圓環的半徑的話,那麼只需要計算第一個圈與第i個圈周長的比值就可以了,而第一個圈與第i個圈周長的比值= 所以,只需要輸出a1:ai就可以了。化最簡我用的是gcd,每次除以它們的gcd,最後到它們的gcd==1就可以輸出了。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[100000];
int i,j,n,x,y;
int gcd(int a,int b)
{
if(b==0)return a;
return gcd(b,a%b);
}
void fs(int m,int n)
{
if(gcd(m,n)==1)
{
x=m;y=n;
return;
}
int a=gcd(m,n);
fs(m/a,n/a);
}
int main()
{
freopen("ring.in","r",stdin);
freopen("ring.out","w" ,stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=2;i<=n;i++)
{
if(a[i]==1||a[1]==1) printf("%d/%d\n",a[1],a[i]);
else
{
fs(a[1],a[i]);
printf("%d/%d\n",x,y);
}
}
fclose(stdin);fclose(stdout);
return 0;
}