注册 登录
编程论坛 C++教室

求助..一个简单的数字排序问题

haohaoxue 发布于 2007-06-09 15:19, 1568 次点击
用C++编个小程序,能输入a=1,b=3,c=2,然后输出b=3>c=2>a=1!我自己想了很久还是没想出来!主要是没搞懂在程序中怎么记忆变量的值!
15 回复
#2
killer_l2007-06-09 19:11

不知道这样行不?




#include <iostream.h>

int main()
{
    int a,b,c;
   
    cout << \"请输入a \" << endl;
    cin >> a ;
   
    cout << \"请输入b \" << endl;
    cin >> b;
   
    cout << \"请输入c\" << endl;
    cin >> c;
   
    if ( a > b )
    {
        if( a > c)
        {
            if( b > c)
            {
                cout << \"a=\" << a  << \">\" << \"b=\" << b << \">\" << \"c=\" << c << endl;
            }
            else
            {
                cout << \"a=\" << a  << \">\" << \"c=\" << c << \">\" << \"b=\" << b << endl;
            }
        }
        else
        {
            cout << \"c=\" << c  << \">\" << \"a=\" << a << \">\" << \"b=\" << b << endl;
        }
    }
    else
    {
        if ( a > c)
        {
            
            cout << \"b=\" << b  << \">\" << \"a=\" << a << \">\" << \"c=\" << c << endl;
        }
        else
        {
            if( b > c)
            {
                cout << \"b=\" << b  << \">\" << \"c=\" << c << \">\" << \"a=\" << a << endl;
            }
            else
            {
                cout << \"c=\" << c  << \">\" << \"b=\" << b << \">\" << \"a=\" << a << endl;
            }
        }
    }
}

[此贴子已经被作者于2007-6-9 19:11:44编辑过]

#3
haohaoxue2007-06-09 20:50

这个行是行有没有更简单的呀?

#4
haohaoxue2007-06-09 20:54
能不能用数组来解决?我感觉好像行!
#5
孤魂居士2007-06-09 21:04
用数组也可以
应该还简单些
#6
谁与争疯2007-06-09 21:05
我来试试。
#7
谁与争疯2007-06-09 21:26
有思路,但是不懂怎么写。

abc在是顺序的,可以+1得到。输入的东西可以一边输入一边用数组保存!并在输入时就排序好!
这样输出时,顺着输出字符n~和数组下标就可以得到了。
#8
haohaoxue2007-06-10 11:55

能不能给个代码!说着好像很容易,但不好写!

#9
aipb20072007-06-10 14:20
我想问下楼主,你是输入3个数排序,还是要满足输入时是以 “a = 1”"b = 3"……这样输入?

input
a=1 b=3 c=2
output
b=3 > c=2 > a=1

这样吗?
#10
kisscjy2007-06-10 16:58

代码如下:

用<map>容器来做的~~
不过有很多WARING,不知道为什么~~~

#include<iostream>
#include<map>
using namespace std;

typedef map<int ,char > mymap;

void main()
{
int num1,num2,num3;
int i=0;

cout<<"输入a=";
cin>>num1;

cout<<"输入b=";
cin>>num2;

cout<<"输入c=";
cin>>num3;

mymap abc;
mymap :: reverse_iterator it;

abc.insert( mymap::value_type (num1,'a') );
abc.insert( mymap::value_type (num2,'b') );
abc.insert( mymap::value_type (num3,'c') );

for (it=abc.rbegin(); it!=abc.rend(); it++,i++)
{
cout<<it->second<<"=";

cout<<it->first;

if ( i!=2)
{
cout<<" > ";
}


}
cout<<endl;

}

#11
haohaoxue2007-06-11 15:51
回复:(aipb2007)我想问下楼主,你是输入3个数排序,...
对就是这个意思!
#12
haohaoxue2007-06-11 15:53
&lt;map&gt;容器没听说过!我们的课程没讲,在那里可以看到这个?
#13
killer_l2007-06-11 15:59
回复:(kisscjy)代码如下:用容器来做的...
能详细说说么?
#14
aipb20072007-06-11 21:39
回复:(haohaoxue)求助..一个简单的数字排序问题

#pragma warning (disable : 4786) //消除vc++6.0中vector<string>产生的警告
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm> //用到标准库提供的排序算法
using namespace std;

int convert(const string &s){ //转换string为int
istringstream in(s);
int ival;
in >> ival;
return ival;
}

string::const_iterator getNbrPosn(const string &s){ //获取string中首个数字位迭代器
string::const_iterator p = s.begin();
for (;p != s.end();++p)
if (*p == '=')
return p+1;
return p;
}

bool moreThan(const string &s1,const string &s2){ //谓词函数,按关键字(int)比较大小
string sub1(getNbrPosn(s1),s1.end());
string sub2(getNbrPosn(s2),s2.end());
return convert(sub1) > convert(sub2);
}

int main(){
vector<string> svec;
string temp;
while (getline(cin,temp))
svec.push_back(temp); //获取输入字符串
stable_sort(svec.begin(),svec.end(),moreThan); //按关键字排序
vector<string>::iterator p = svec.begin();
for (;p != svec.end();++p) //输出结果
cout << *p << (p+1 == svec.end() ? "\n" : " > ");
return 0;
}

接受任意个输入
input:
(字母)(=)(数字)
crtl+z 回车
crtl+z 回车
结束输入。

环境vc++6.0

[此贴子已经被作者于2007-6-11 22:00:03编辑过]

#15
killer_l2007-06-11 21:41
回复:(aipb2007)回复:(haohaoxue)求助..一个简...
加点注释啊,完全不懂
#16
孤魂居士2007-06-11 22:47
我也是``不懂```看的没有自信了
1