浙大PAT考試1069~1072,浙大pat10691072

來源:互聯網
上載者:User

浙大PAT考試1069~1072,浙大pat10691072


題目地址:http://pat.zju.edu.cn/contests/pat-a-practise


1069:

由下降序和上升序兩個四位元不斷相減,然後得到新資料,始終會到達一個數字終止。

遞迴可以寫,簡單。

AC代碼:

#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;int p[4];void dfs(int a,int b){    int del=a-b;    printf("%04d - %04d = %04d\n",a,b,del);    if(del==6174||del==0) return;    int i=0;    while(i<4)    {        p[i]=del%10;        del/=10;        i++;    }    sort(p,p+4);    int m1=p[3]*1000+p[2]*100+p[1]*10+p[0];    int m2=p[0]*1000+p[1]*100+p[2]*10+p[3];    dfs(m1,m2);}int main(){    int n;    while(cin>>n)    {        int i=0;        while(i<4)        {            p[i]=n%10;            n/=10;            i++;        }        sort(p,p+4);        int m1=p[3]*1000+p[2]*100+p[1]*10+p[0];        int m2=p[0]*1000+p[1]*100+p[2]*10+p[3];        dfs(m1,m2);    }    return 0;}


1070:

按照比值排序,遍曆即可。

AC代碼:

#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const double eps=1e-12;struct node{    double num;    double price;}nod[1005];int cmp(node p1,node p2){    if(p1.price/p1.num>=p2.price/p2.num) return 1;    return 0;}int main(){    int n,i;    double total;    while(cin>>n>>total)    {        for(i=0;i<n;i++) cin>>nod[i].num;        for(i=0;i<n;i++) cin>>nod[i].price;        sort(nod,nod+n,cmp);        double res=0;        for(i=0;i<n;i++)        {            if(total>nod[i].num)            {                res+=nod[i].price;                total-=nod[i].num;            }            else            {                res+=nod[i].price*(total/nod[i].num);                break;            }        }        printf("%.2f\n",res);    }    return 0;}/*3 200180 150 1007.5 7.2 4.5*/


1071:

就是讓你在一段文字中找出現最多次數的單詞,類比即可。

AC代碼:

#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<map>#include<cstring>#include<string>#define maxn 1050000using namespace std;char str[maxn];char ans[maxn];char tmp[maxn];int ans1;map <string,int> mq;int judge(char p1){    if(p1>='0'&&p1<='9') return 1;    if(p1>='a'&&p1<='z') return 1;    if(p1>='A'&&p1<='Z') return 1;    return 0;}int main(){    int len,i,p;    while(gets(str))    {        strcpy(ans,"");   //³õʼ»¯        ans1=0;        mq.clear();        len=strlen(str);        p=0;        for(i=0; i<len; i++)        {            if(judge(str[i]))            {                if(str[i]>='A'&&str[i]<='Z')                    str[i]=str[i]+('a'-'A');                tmp[p++]=str[i];            }            else if(!judge(str[i])&&p>0)            {                tmp[p]='\0';                mq[tmp]++;                if(mq[tmp]>ans1||(mq[tmp]==ans1&&strcmp(tmp,ans)<=0))                {                    strcpy(ans,tmp);                    ans1=mq[tmp];                }                p=0;            }        }        if(p>0)        {            tmp[p]='\0';            mq[tmp]++;            if(mq[tmp]>ans1||(mq[tmp]==ans1&&strcmp(tmp,ans)<=0))            {                strcpy(ans,tmp);                ans1=mq[tmp];            }        }        cout<<ans<<" "<<ans1<<endl;    }    return 0;}/*Can1: "Can a can can a can?  It can!"*/


1072:

給你居民個數n,加油站個數m,k條路徑,加油站到居民距離不能超過的最大值d。然後接下來給了k條路徑。

題目讓我們求在所有的加油站中找符合不超過d的加油站。

如果加油站不唯一,按順序優先考慮下面三個條件:

1.居民最短距離最大的加油站。

2.到所有居民距離之和最小的。

3.編號最小的。


這個題目坑了很久,沒能AC,有兩個case過不了,只有22分。。。。。。

好累。。。

代碼:

#include<iostream>#include<cstdio>#include<vector>#include<cstring>#include<string>#include<algorithm>using namespace std;const int maxn = 1e9;int n,m,k,d;//居民個數,候選加油站,多少條路,距離限制int mp[1505][1505]; //存地圖int dis[1505]; //最短路int visi[1505];struct node{    int index;  //編號    int sum;    //總距離    int mi;     //最短的距離};int calnumber(){    char tmp[105];    cin>>tmp;    int ans=0,i;    int len=strlen(tmp);    if(tmp[0]=='G')    {        for(i=1;i<len;i++)            ans=ans*10+(tmp[i]-'0');        return ans;    }    else    {        for(i=0;i<len;i++)            ans=ans*10+(tmp[i]-'0');        return ans+m;    }}void input()  //輸入函數{    int i,j;    for(i=0;i<1500;i++)    {        for(j=0;j<1500;j++)        {            if(i==j) mp[i][j]=0;            else mp[i][j]=maxn;        }    }    for(i=0;i<k;i++)    {        int p1=calnumber();        int p2=calnumber();        int weight;        cin>>weight;        mp[p1][p2]=mp[p2][p1]=weight;    }}void dijkstra(int p){    int i,j;    for(i=0;i<=1500;i++)    {        dis[i]=maxn;        visi[i]=0;    }    dis[p]=0;  //起始點    for(i=1;i<=n+m;i++)    {        int cur,mi=maxn;        for(j=1;j<=n+m;j++)   //從當前結點中找一個距離最小的,拿出來標記        {            if(!visi[j]&&dis[j]<mi)            {                mi=dis[j];                cur=j;            }        }        visi[cur]=1;        for(j=1;j<=n+m;j++)        {            if(dis[j]>dis[cur]+mp[cur][j])                dis[j]=dis[cur]+mp[cur][j];        }    }}int main(){    int i,j;    int flag;    while(cin>>n>>m>>k>>d)    {        flag=0;  //flag=1表示已經有滿足要求的station了        input();        node ans;        for(i=1;i<=m;i++)        {            dijkstra(i);            int tot=0,mi=maxn,ma=0;            for(j=m+1;j<=m+n;j++)   //只計算house的距離            {                if(mi>dis[j])                    mi=dis[j];                if(ma<dis[j])                    ma=dis[j];                tot+=dis[j];            }            if(ma>k) continue;  //超出服務涵蓋範圍            if(flag==0)            {                ans.index=i;                ans.sum=tot;                ans.mi=mi;                flag=1;            }            else            {                int q=0;   //q=1說明要更新                if(mi>ans.mi)  //加油站越遠越好                    q=1;                else if(mi==ans.mi&&tot<ans.sum)                    q=1;                else if(mi==ans.mi&&tot==ans.sum&&i<ans.index)                    q=1;                if(q)                {                    ans.index=i;                    ans.sum=tot;                    ans.mi=mi;                }            }            //printf("G%d\n",ans.index);            //printf("%.1f %.1f\n",(double)ans.sum/n,(double)ans.mi);            //printf("%d\n",ans.ma);            //printf("%d\n",ans.sum);        }        if(flag==0)        {            puts("No Solution");            continue;        }        printf("G%d\n",ans.index);        printf("%.1f %.1f\n",(double)ans.mi,(double)ans.sum/n);    }    return 0;}/*4 3 11 51 2 21 4 21 G1 41 G2 32 3 22 G2 13 4 23 G3 24 G1 3G2 G1 1G3 G2 22 1 2 101 G1 92 G1 20*/




浙大的PAT考試只可以用C/C++?可不可以用JAVA

我曾經參加過,可以用Java提交,但是伺服器會將Java翻譯成C語言,但不保證正確性,你可以到題庫去試試,比如練習題中有一個出租車計價,Java寫第四個用例絕對通不過,C可以。
 
浙大PAT java提交格式?最近想練編程,做1001提交說返回非0,不知道怎更改,要什格式?

汗水在路旁

以為墨痕淺的一紙相思

天空映記著你的彷徨

但始終有一天可以的

的了·為為何還遲遲不的鎖

朝霞又一的參透的風的絮語。

你的的步一路在後
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.