| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1480 人关注过本帖
标题:循环,函数,新手求找错误
取消只看楼主 加入收藏
lybl
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-11-27
结帖率:0
收藏
 问题点数:0 回复次数:1 
循环,函数,新手求找错误
Description
Bob在玩一个积分游戏,游戏由3轮组成。每一轮都可以获得一个不小于零且不大于10^6的积分奖励,游戏完成后,Bob的积分是三轮游戏的分数和。本来应该是机器自动计算后给Bob发放奖励,但是由于机器故障,机器记录的三次分数中间没有任何间隔,工作人员检查后表示暂时无法修复,如果想要现在领取奖励,需要自己将3次分数告诉他,Bob忘记了他每轮的分数,但是想现在就得到奖励。为了得到更多的积分奖励,Bob向你发出求助,你能帮他计算出他能获得的最大分数吗?

Input
多组测试,首先输入进行的游戏次数n(n<10),接下来n行每行包括一个长度不超过30个字符的字符串。保证输入的字符只包含数字。一句字符串代表该轮游戏机器人记录的三次分数,三次分数之间没有间隔。

Output
输出Bob在该轮能获得的最大奖励分数,如果无法得到最大奖励,则输出-1。注意:结果可能超出int范围,每轮成绩不能有前导0。

Sample Input
3
1234
0009
9991

Sample Output
37
-1
109

HINT
1234分解为1,2,34 所以结果为37

0009无法分解成三个不包含前导零的数,所以结果为-1

我的思路:
用两重循环作为界限,将字符串分成三个小字符串。判断小字符串是否符合题意,再转化为数字,相加即可。
#include <stdio.h>
#include <string.h>

int isLegal(char *s);//判断字符串是否符合题意
int Switch(char *s);//将字符串转化为数字

int main()
{
    int T;
    scanf("%d",&T);
    getchar();
    while(T--)
    {
        int i,j,n;//i,j表示界限
        int t,ans=-1;
        char s[32],s1[32],s2[32],s3[32];//s1,s2,s3分别为三个小串
        gets(s);
        n=strlen(s);
        
        if(n>2&&n<22)
        {
        for(i=1;i<8&&i<n-1;i++)
        {
            strncpy(s1,s,i);
           if(isLegal(s1))
              {
                  for(j=1;j<8&&i+j<n;j++)
                  {
                      strncpy(s2,s+i,j);
                      if(isLegal(s2))
                      {
                          strcpy(s3,s+i+j);
                          if(isLegal(s3))
                          {
                              t=Switch(s1)+Switch(s2)+Switch(s3);
                              ans=ans>t?ans:t;
                          }
                      }
                  }
              }
        }
        }
        printf("%d\n",ans);
    }
    return 0;
}

int isLegal(char *s)
{
    int n=strlen(s);
    if(n==0)
       return 0;
    else if(n==1)
       return 1;
    else
    {
        if(*s=='0')
           return 0;
        else if(n<7)
           return 1;
        else if(n==7)
           return (!strcmp(s,"1000000"));
        else
           return 0;
    }
}

int Switch(char *s)
{
    int i,t=0;
    for(i=0;*(s+i)!='\0';i++)
       t=t*10+*(s+i)-'0';
    return t;
}

[此贴子已经被作者于2018-2-3 11:39编辑过]

搜索更多相关主题的帖子: 游戏 分数 字符串 int return 
2018-02-03 11:31
lybl
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-11-27
收藏
得分:0 
回复 2楼 虫眼
strncmp函数自动加'\0',strcmp函数连同'\0'一起复制吧
2018-02-07 15:31
快速回复:循环,函数,新手求找错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014074 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved