hrbust 軟件與微電子學院 ACM 2017 級新人熱身程序競賽

題冊鏈接 密碼 hrbust2017ACM

A。

#include<stdio.h>
int main()
{
    int a,b;
    while(scanf("%d%d",&a,&b)==2)
    {
        printf("%d\n",a+b);
    }
}

B.你們過吧。。這個我出這玩的。。

#include <iostream>  
#include<stdio.h>  
#include<cstring>  
#include<algorithm>  
using namespace std;  
int vis[200];//標記是否被訪問過  
char s[5];  
int cnt;//出現過的顏色和數字數  
int card[110];  
int map[11000];  
int sum; //不同的牌數  
int ok[110];  
  
int main()  
{  
    int n;  
    scanf("%d",&n);  
    int ans = 100;  
    memset(vis,0,sizeof vis);  
    memset(map,0,sizeof map);  
    memset(ok,0,sizeof ok);  
    cnt = 0;  
    sum = 0;  
    for(int i = 0; i < n; i++)  
    {  
        scanf("%s",s);  
        if(!vis[s[0]])  
        {  
            vis[s[0]] = ++cnt; //編號1 - 10  
        }  
        if(!vis[s[1]])  
        {  
            vis[s[1]] = ++cnt;  
        }  
        int temp = vis[s[0]]*100+vis[s[1]]; //前兩位表示顏色,後兩位表示數字  
        if(!map[temp]) //這張牌之前沒有出現過  
        {  
            map[temp] = 1;  
            card[++sum] = temp; //給牌編號  
        }  
    }  
    for(int i = 0; i < (1 << cnt); i++) //枚舉所有提示的可能  
    {  
        int tt = 0; //提示的次數  
        for(int j = 0; j <= cnt; j++)  
        {  
            if((1 << j)&i)  
            {  
                tt++;  
                for(int k = 1; k <= sum; k++)  
                {  
                    //如果顏色或者數字被提示到了,那麼對應的ok值也就是提示值加上對應的標號  
                    //如果是顏色要乘100,因爲我用前兩位表示顏色  
                    if(card[k]/100 == j + 1)  ok[k] += 100 * (j+ 1) ;  
                    if(card[k]%100 == j + 1)  ok[k] += j + 1 ;  
                }  
            }  
        }  
        //判斷有沒有兩個數的ok值相同的  
        sort(ok+1,ok+sum+1);  
        int flag = 0;  
        for(int i = 2; i <= sum; i++)  
        {  
            if(ok[i] == ok[i - 1])  
            {  
                flag = 1;  
                break;  
            }  
        }  
        memset(ok,0,sizeof ok);  
        if( !flag && tt < ans) ans = tt;  
    }  
  
    printf("%d\n",ans);  
    return 0;  
}  


C.可出題。。

#include<cstdio>  
#include<cstring>   
int main()  
{  
  
    int i,j,k;  
    int n,m;  
    int num[1010];  
    while(scanf("%d%d%d",&n,&m,&k)!=EOF)  
    {  
        for(i=1;i<=n;i++)  
        {  
            scanf("%d",&num[i]);  
        }  
        int sum=0;  
        for(i=1;i<=n;i++)  
        {  
  
            if(num[i]==1)  
            {  
                if(m)  
                {  
                    m--;  
                }  
                else  
                {  
                    sum++;  
                }  
  
            }  
            else if(num[i]==2)  
            {  
                if(k)  
                {  
                    k--;  
                }  
                else if(m)  
                {  
                    m--;  
                }  
                else  
                {  
                    sum++;  
                }  
            }  
        }  
        printf("%d\n",sum);  
    }  
    return 0;  
}

D.

#include<stdio.h>
#include<string.h>
int main()
{
    int sum=0;
    char a[1003],c;
    int i=0,j=0,k=0;
    while(scanf("%s",a)!=-1)
    {
        if(strcmp(a,"add")==0)
        {
            scanf(" %c",&c);
            if(c=='a')
            {
                sum=7;
                i=1,j=1,k=1;
            }
            else if(c=='r'&&i==0)
                sum+=4,i=1;
            else if(c=='w'&&j==0)
                sum+=2,j=1;
            else if(c=='x'&&k==0)sum+=1,k=1;
        }
        if(strcmp(a,"del")==0)
        {
            scanf(" %c",&c);
            if(c=='a')
                sum=0,i=0,j=0,k=0;
            else if(c=='r'&&i==1)
                sum-=4,i=0;
            else if(c=='w'&&j==1)
                sum-=2,j=0;
            else if(c=='x'&&k==1)sum-=1,k=0;

        }
        if(strcmp(a,"show")==0)
        {
            printf("%d\n",sum);
        }
        //memset(a,0,sizeof(a));
        getchar();
    }
}


E.海倫公式求三角形面積

#include<cstdio>
#include<cmath>
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        double x,y,z;
        scanf("%lf%lf%lf",&x,&y,&z);
        double p = (x+y+z)/2;
        if((x+y)>z&&(x+z)>y&&(y+z)>x)///判斷三角形
        printf("%.2f\n",sqrt(p*(p-x)*(p-y)*(p-z)));
        else printf("it's not a triangle!\n");
    }
}

F.

#include<cstdio>
#include<cmath>
int main()
{
    int right,left;
    while(scanf("%d%d",&right,&left)==2)
    {
        int Flag=0;
        for(int i=right;i<=left;i++)
        {
            int tmp=i;
            int x,y,z;
            x=tmp%10,tmp/=10,y=tmp%10,tmp/=10,z=tmp%10;
            if(x*x*x+y*y*y+z*z*z==i)
            {
                if(Flag)printf(" ");
                printf("%d",i);
                Flag=1;
            }
        }
        if(!Flag)printf("no");
        printf("\n");
    }
}

G.

#include<stdio.h>  
#include<string.h>  
#include<algorithm>  
using namespace std;  
#define N 10  
int res;  
int n;  
int m;  
char maps[N][N];  
int vis[N][N];  
int judge(int x,int y)  
{  
    for(int i=y-1; i>=0&&maps[x][i]=='.'; i--)  
        if(vis[x][i]==1)  
            return 0;  
    for(int i=x-1; i>=0&&maps[i][y]=='.'; i--)  
    {  
        if(vis[i][y]==1)  
            return 0;  
    }  
    for(int i=x-1,j=y-1; i>=0&&maps[i][j]=='.'&&j>=0; j--,i--)  
    {  
        if(vis[i][j]==1)  
            return 0;  
    }  
    for(int i=x-1,j=y+1; i>=0&&maps[i][j]=='.'&&j<n; j++,i--)  
    {  
        if(vis[i][j]==1)  
            return 0;  
    }  
    return 1;  
}  
void dfs(int pos,int tmp)  
{  
    if(pos>=m)  
        return ;  
    if(res<tmp)  
    {  
        res=tmp;  
    }  
    pos++;  
    dfs(pos,tmp);  
    if(maps[pos/n][pos%n]=='.'&&judge(pos/n,pos%n))  
    {  
        vis[pos/n][pos%n]=1;  
        dfs(pos,tmp+1);  
        vis[pos/n][pos%n]=0;  
    }  
    return ;  
}  
int main()  
{  
    while(scanf("%d",&n),n)  
    {  
        res=0;  
        memset(vis,0,sizeof(vis));  
        for(int i=0; i<n; i++)  
        {  
            scanf("%s",maps[i]);  
        }  
        m = n*n;  
        if(maps[0][0]=='.')  
        {  
            vis[0][0]=1;  
            dfs(0,1);  
            vis[0][0]=0;  
        }dfs(0,0);  
        printf("%d\n",res);  
    }  
}  
H.巴士博弈 找規律

#include<stdio.h>
int main()
{
    int n,m;//!巴士博弈
    while(~scanf("%d%d",&n,&m))
    {
        if(n%(m+1)==0) printf("LeyniV5!\n");
        else printf("JiaozhuV5!\n");
    }
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章