第二轮华为编程大赛2014-6-14

二师弟的星际加法

描述:


我 是网络公司的一名普通程序员,英文名Steven,发音比较像“师弟”,自从入职培训自我介绍后,大家就称我为“二师弟”,我喜欢看科幻小说,也喜欢做 梦,有一次梦到外星球,发现外星人使用的并非10进制/16进制等,有些星球居然使用N进制(据统计N都在2~35之间),现在我们将首先给您一个数字表 示N进制,然后给出两个数字的字符串,请算出其求和结果并输出,如果输入不能正常计算则输出-1。

 

说明:

1:数字的字符串其中包括0-9和a-z(表示10-35)。

2:所有的输入和输出都只会是小写字母或数字,不存在其他字符。

 

运行时间限制:

无限制

内存限制:

无限制

输入:

整形数:计算进制

字符串:计算数1

字符串:计算数2

输出:

字符串:计算结果

样例输入:

10

 

100

 

100

样例输出:

200

答案提示:

 

---------JAVA 通过了

 

   import java.math.BigInteger;

   import java.util.InputMismatchException;

   import java.util.Scanner;

 

   public class Main {

           

           public static void main(String[] args) {

                    Scanner cin = newScanner(System.in);

                    int N = cin.nextInt();

                    if (N > 35 || N < 2)

                            System.out.println("-1");

                    else {

                            try {

                                    BigIntegera = cin.nextBigInteger(N);

                                    BigIntegerb = cin.nextBigInteger(N);

                                    BigInteger c = a.add(b);

                                   System.out.println(c.toString(N));

                            }

                            catch(InputMismatchException e) {

                                   System.out.println("-1");

                            }

                    }

           }

    }

 

 

 

------------C语言没调出

   #include <STDIO.H> 

   #include<STRING.H> 

   #define M 100 

   char char_int(int a); 

     

 

 intmain() 

   { 

       int N; 

       char A[M]; 

       char B[M]; 

       char C[M]; 

       int  a[M],length_a; 

       int  b[M],length_b; 

       int  c[M],length_c; 

       int i; 

       /*输入*/ 

       printf("please Enter the number of Decimal:\n"); 

       scanf("%d",&N); 

        fflush(stdin); 

       printf("please Enter The string1:\n"); 

       gets(A); 

       fflush(stdin); 

       length_a=strlen(A); 

       printf("please Enter The string2:\n"); 

       gets(B); 

       length_b=strlen(B); 

       fflush(stdin); 

       /*处理*/ 

   /*将A中的字符都变成相对应的数字*/ 

       for(i=0;i<length_a;i++) 

       { 

           a[i]=(int)(A[length_a-1-i]); 

           if(a[i]>=48&&a[i]<=57) 

                a[i]=a[i]-48; 

           else 

                a[i]=a[i]-87; 

           if(a[i]>=N) 

                return printf("-1\n"); 

       } 

   /*将B中的字符都变成相对应的数字*/ 

       for(i=0;i<length_b;i++) 

       { 

           b[i]=(int)B[length_b-1-i]; 

           if(b[i]>=48&&b[i]<=57) 

                b[i]=b[i]-48; 

           else 

                b[i]=b[i]-87; 

           if(b[i]>=N) 

                return printf("-1\n"); 

       } 

   /*将A与B相加后所得的结果放在C中*/ 

       if(length_a>=length_b) 

       { 

           for(i=length_b;i<length_a;i++) 

                b[i]=0; 

           for(i=0;i<length_a+1;i++) 

                c[i]=0; 

           for(i=0;i<length_a;i++) 

           { 

                c[i]=a[i]+b[i]+c[i]; 

                if(c[i]>=N) 

                { 

                    c[i+1]=1; 

                    c[i]=c[i]-N; 

                } 

           } 

           if(c[length_a]==0) 

                length_c=length_a; 

           else 

                length_c=length_a+1; 

        } 

       else 

       { 

           for(i=length_a;i<length_b;i++) 

                a[i]=0; 

           for(i=0;i<length_b+1;i++) 

                c[i]=0; 

           for(i=0;i<length_b;i++) 

           { 

                c[i]=a[i]+b[i]+c[i]; 

                if(c[i]>=N) 

                { 

                    c[i+1]=1; 

                    c[i]=c[i]-N; 

                } 

           } 

           if(c[length_b]==0) 

                length_c=length_b; 

           else 

                length_c=length_b+1; 

       } 

       for(i=0;i<length_c;i++) 

           C[i]=char_int(c[length_c-1-i]); 

       for(i=0;i<length_c;i++) 

           printf("%c ",C[i]); 

       printf("\n"); 

       return 0; 

   } 

 

 

   /******************************************************

    将char型的字符转成相对应的10进制数字

   ******************************************************/ 

   char char_int(int a) 

   { 

       char b; 

       if(a>=0&&a<=9) 

           b=(char)(a+48); 

        else 

           b=(char)(a+87); 

       return b; 

   } 

 

 

 

赛况统计

描述:

有一个游戏平台,各个参赛队伍(以唯一的TeamID来标识)之间进行单循环的对抗赛,两个队伍之间只举行一场比赛,比赛以得分的多少定胜负。需要完成一个统计赛况的程序,能够随时查询指定队伍的最新赛况:包括胜、平、负的局数,当前总积分以及名次。
说明:循环赛没有全部结束时也可以查询某个队伍的最新赛况
比赛判定:两个队伍中得分高的一方为胜者,另一方为负者;得分相同则为平局
积分规则:每一局比赛: 胜者积3分;平局双方各积1分; 负者积0分
排名规则:按照当前总积分的高低,名次从1开始依次进行排名。积分相同的名次并列,出现n(n>=2)个队伍名次并列时,则并列名次的以下n-1个名次空出
例如:

队伍1:积4分
队伍2:积2分
队伍3:积4分
队伍4:积5分
得到比赛结果:
队伍4:第1名
队伍1:第2名
队伍3:第2名
队伍2:第4名

循环赛的前两场比赛结果如下:

队伍1ID

队伍1得分

队伍2ID

队伍2得分

比赛1

1

34

2

45

比赛2

2

40

3

40

查询队伍2的当前赛况,结果为: 

队伍ID

胜的场数

平局场数

负的场数

总积分

名次

2

1

1

0

4

1

规格:

输入满足如下规格或约束,考生程序无需检查: 
(1)比赛队伍总数<=1000
(2)0 <= TeamID <= 65535
(3)每个队伍的总积分<=65535
(4)队伍1对队伍2的比赛, 队伍2对队伍1的比赛指同一场比赛 
(5)不会重复输入同一场比赛的比赛结果 
(6)自己和自己不比赛 

运行时间限制:

无限制

内存限制:

无限制

输入:

三种命令,每条命令一行,格式分别为:

1、增加比赛结果

AddGameResult Team1Id Team1Score Team2Id Team2Score

其中Team1Id Team1Score Team2Id Team2Score为正整数

 

2、查询队伍的最新赛况

GetTeamResult TeamId

其中Team1Id为正整数 

收到该命令,输出该队伍的比赛赛况。

 

3、清除所有比赛队伍及其赛况信息

Clear

该命令没有参数

 

其他命令系统忽略。

输出:

仅当GetTeamResult命令输出信息,格式为:队伍ID 胜的场数 平局场数 负的场数 总积分 名次,一个空格隔开

如果查询的队伍ID没有比赛信息,输出:队伍ID -1

样例输入:

AddGameResult 1 34 2 45

AddGameResult 2 40 3 40

GetTeamResult 2

样例输出:

2 1 1 0 4 1

答案提示:

 

---------------------没有调试出

    #include<stdio.h> 

    #include<string.h> 

    #include <stdlib.h>  

            

       #define N 65535

       int Team1Id, Team2Id;

       int Team1Score, Team2Score;

 

       struct Team{

              int TeamID;

              int win[N];

              int equal[N];

              int lose[N];

              int Score[N];

              int Order[N];

       }Team;

 

    int main(void) 

    { 

              int i,j;

              intTeamMax, GetId, Order[N]={0};

              int order;

              i = N;

              while(i--)

              {

                     Team.equal[i] = 0;

                     Team.lose[i] = 0;

                     Team.Score[i] = 0;

                     Team.win[i] = 0;

                     Team.Order[i] = i;

              }

      

              for(i=0; i<2; i++)

              {

                     printf("AddGeamResult");

                     scanf("%d %d %d%d", &Team1Id, &Team1Score, &Team2Id, &Team2Score);

                     Team.Score[Team1Id] +=Team1Score;

                     Team.Score[Team2Id] +=Team2Score;

                     if(Team.Score[Team1Id] >   Team.Score[Team2Id])

                     {    

                            Team.lose[Team2Id]++;

                            Team.win[Team1Id]++;

                     }

                     else if(Team.Score[Team1Id]== Team.Score[Team2Id])

                     {    

                            Team.equal[Team1Id]++;

                            Team.equal[Team2Id]++;

                     }

                     else

                     {    

                            Team.lose[Team1Id]++;

                            Team.win[Team2Id]++;

                     }

                     TeamMax = (Team1Id >Team2Id) ? Team1Id : Team2Id;

              }

 

              for(i=0; i<=TeamMax; i++)

              {

                     Order[i] = Team.Score[i];

              }

 

              for(i=0; i<=TeamMax; i++)                        //排序

                     for(j=0; j<= TeamMax-i;j++)

                     {

                            if(Order[i] <Order[j])

                            {

                                   order =Order[i];

                                   Order[i] =Order[j];

                                   Order[j] =Order[i];

                            }

                     }

 

              for(i=0; i<=TeamMax; i++)                 //定Order[], 不含同分的排名

              {

                     for(j=0; j<=TeamMax;j++)

                     {

                            if(Order[i] ==Team.Score[j])

                                   Team.Order[j]= i;

                     }

              }

         

      

 

              printf("GetTeamResult");

              scanf("%d", &GetId);

              if (GetId > TeamMax)

                     printf("%d -1",GetId);

              else

              printf("%d %d %d %d %d%d\n", GetId, Team.win[GetId], Team.equal[GetId], Team.lose[GetId],Team.Score[GetId], Team.Order[GetId]);

 

 

        return 0; 

     

         

    } 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值