| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 476 人关注过本帖
标题:杭电1106题 求错在哪里
只看楼主 加入收藏
xiaang123
Rank: 2
等 级:论坛游民
帖 子:7
专家分:20
注 册:2012-4-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
杭电1106题 求错在哪里
程序代码:
#include<iostream>
#include<string>
using namespace std;
#define MAXQSIZE 10
#define error -1
#define ok 1
typedef int status;
typedef char QElemtype;
// 构建队列
typedef struct{
    int front;
    int rear;
    QElemtype *base;
}sqQueue;
status InitQue(sqQueue *s){
    s->base=(QElemtype*)malloc(MAXQSIZE*sizeof(QElemtype));
    if(!s->base) return error;
    s->front=s->rear=0;
    return ok;
}

int Queuelength(sqQueue *s)
{
    return (s->rear-s->front+MAXQSIZE)%MAXQSIZE;
}

status Enque (sqQueue *s, QElemtype e)
{
    s->base[s->rear]=e;
    s->rear=(s->rear+1)%MAXQSIZE;
    return ok;
}

status Deque(sqQueue *s,QElemtype *e){
    *e=s->base[s->front];
    s->front=(s->front+1)%MAXQSIZE;
    return ok;
}


int bj(string a,string b){ //比较字符串
    int i,j;
    i=a.length();
    j=b.length();
    if(i>j) return 1; //先比较长度
    if(i<j) return 0;
    if(i=j){
        return a>b?1:0; //相等 则比较字符串首数字
    }
    return ok; //a>b 返回1 否则0
}

int main(){
    sqQueue s;
    char m; // m用来Deque(sqQueue *s,QElemtype *e) 中的e
    InitQue(&s); //构建队列S
    string a,b[100];// a 用户输出 b保存分割以后的数字串
    cin>>a;
    int k=a.length();
    int n=0;
    for(int i=0;i<k;i++){
        while(a[i]!='5'){
            Enque(&s,a[i]);
            i++;
        }
        if(Queuelength(&s)){  //a[i]不等于 且队列不为空
            int k=0;
            for(int j=0;j<Queuelength(&s);j++){
                Deque(&s,&m);
                if(j==0&&m=='0'){ //若从第一个开始就为0 则一直出队列 直到不为0 或队列最后一个
                    do{
                        j++;
                        Deque(&s,&m);
                    }while(m!='0' || j==Queuelength(&s));
                }
               
                    b[n]+=m;
            }
            n++;
        }
    }
    for(i=0;i<n-1;i++){  //将分割后的按大小排好序
        for(int j=1;j<n;j++){
            if(bj(b[i],b[j])){
                string str=b[i];
                b[i]=b[j];
                b[j]=str;
            }
        }
    }

    for(i=0;i<n;i++){ //一个一个输出
        cout<<b[i]<<" ";
    }
    cout<<endl;
    return 0;
}
Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。

你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。


 

Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。  

输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。

 

Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。

 

Sample Input
0051231232050775
 

Sample Output
0 77 12312320
搜索更多相关主题的帖子: 1106 status color 
2012-04-06 16:37
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:20 
程序代码:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    string nStr;
    vector<int> nVec;

    getline(cin, nStr, '\n');
    string::size_type nIndex = nStr.find_first_of('5');
    while (string::npos != nIndex)
    {
        nVec.push_back(atoi(nStr.substr(0, nIndex).c_str()));
        nStr = nStr.substr(nIndex+1);
        nIndex = nStr.find_first_of('5');
    }
    if (!nStr.empty())
    {
        nVec.push_back(atoi(nStr.c_str()));
    }

    sort(nVec.begin(), nVec.end());
    for (vector<int>::const_iterator it=nVec.begin(); it != nVec.end(); ++it)
    {
        cout << *it << ' ';
    }
    cout << endl;
    return 0;
}
2012-04-06 17:04
快速回复:杭电1106题 求错在哪里
数据加载中...
 
   



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

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