1. 程式人生 > >2018.10.17學校前兩題題解(後兩題還沒改出來)

2018.10.17學校前兩題題解(後兩題還沒改出來)

第一題:

第一題的輸入卡了我好久!!本來想用scanf的,但是發現沒有打出字元個數,不知道輸入多少個字元,c++又不能用字串……開了個gets(),結果因為linux的換行符不一樣,爆零了…… 滿分思路:\color{red}\text{滿分思路:}先用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好,沒有這麼多輸入方式

第二題:

第二題其實很簡單。 滿分思路:\color{red}\text{滿分思路:}ai為圓環的半徑的話,那麼只需要計算第一個圈與第i個圈周長的比值就可以了,而第一個圈與第i個圈周長的比值=a12π:ai2π=a1:aia_{1}*2\pi:a_{i}*2\pi=a_{1}:a_{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; }