返回信息流输入若干(不超过1000个)非负整数数字,请先取出为奇数的数字按从大到小排序,再取出偶数从小到大进行排序
运行时间限制: 10 Sec
内存限制: 128 MByte
输入:
输入一串乱序的数字
输出:
输出排序后的数字
样例输入:
12 34 5 7 92 3 8
样例输出:
7 5 3 8 12 34 92
我的代码:
#include<vector>
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp1(int a,int b)
{
return a>b;
};
bool cmp2(int a,int b)
{
return a<b;
};
int main()
{
int a;
vector<int> arr1,arr2;
while(cin>>a)
{
if(a%2==1)
arr1.push_back(a);
else
arr2.push_back(a);
sort(arr1.begin(),arr1.end(),cmp1);
sort(arr2.begin(),arr2.end(),cmp2);
for(int i=0;i<arr1.size();i++)
{
printf("%d ",arr1[i]);
}
for(int i=0;i<arr2.size();i++)
{
printf("%d ",arr2[i]);
}
printf("\n");
}
return 0;
}
可想而知,运行结果会多打印出来很多行。
该怎么改程序呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #82643同步于 2014/9/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
刷C++遇到个问题求助
acofy
2014/9/19镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
加一个}即可,然后去掉一个}
像这样
#include<vector>
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp1(int a,int b)
{
return a>b;
};
bool cmp2(int a,int b)
{
return a<b;
};
int main()
{
int a;
vector<int> arr1,arr2;
while(cin>>a)
{
if(a%2==1)
arr1.push_back(a);
else
arr2.push_back(a);
}//这一行加一个{
sort(arr1.begin(),arr1.end(),cmp1);
sort(arr2.begin(),arr2.end(),cmp2);
for(int i=0;i<arr1.size();i++)
{
printf("%d ",arr1[i]);
}
for(int i=0;i<arr2.size();i++)
{
printf("%d ",arr2[i]);
}
printf("\n");
return 0;
}
测试的时候别忘了输eof
【 在 acofy 的大作中提到: 】
: 输入若干(不超过1000个)非负整数数字,请先取出为奇数的数字按从大到小排序,再取出偶数从小到大进行排序
: 运行时间限制: 10 Sec
: 内存限制: 128 MByte
: ...................
输完数字后输入eof而不是回车吗?
【 在 Dango (算法团子) 的大作中提到: 】
: 加一个}即可,然后去掉一个}
: 像这样
: #include<vector>
: ...................
通过『我邮2.0』发布
这种输入方法好像有点不符题目的输入要求了,我怕机试不能AC了
【 在 Dango (算法团子) 的大作中提到: 】
: 加一个}即可,然后去掉一个}
: 像这样
: #include<vector>
: ...................
通过『我邮2.0』发布
输入要求按你说的,不是若干吗?
我根本没改你的输入
【 在 acofy 的大作中提到: 】
: 这种输入方法好像有点不符题目的输入要求了,我怕机试不能AC了
:
: 通过『我邮2.0』发布
谢谢!想再问问程序怎么改,才能在不输入eof的情况下,程序也能正确输出?
【 在 Dango 的大作中提到: 】
: 输入要求按你说的,不是若干吗?
: 我根本没改你的输入
:
加一行freopen,然后在你存这个cpp的地方建一个in.txt,里面写上你要输入的数据比如
12 34 5 7 92 3 8
就行了
#include<vector>
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp1(int a,int b)
{
return a>b;
};
bool cmp2(int a,int b)
{
return a<b;
};
int main()
{
freopen("in.txt","r",stdin); int a;
vector<int> arr1,arr2;
while(cin>>a)
{
if(a%2==1)
arr1.push_back(a);
else
arr2.push_back(a);
}//这一行加一个{
sort(arr1.begin(),arr1.end(),cmp1);
sort(arr2.begin(),arr2.end(),cmp2);
for(int i=0;i<arr1.size();i++)
{
printf("%d ",arr1[i]);
}
for(int i=0;i<arr2.size();i++)
{
printf("%d ",arr2[i]);
}
printf("\n");
return 0;
}
【 在 acofy 的大作中提到: 】
: 谢谢!想再问问程序怎么改,才能在不输入eof的情况下,程序也能正确输出?
附件(17B) in.txt
【 在 acofy 的大作中提到: 】
: 输入若干(不超过1000个)非负整数数字,请先取出为奇数的数字按从大到小排序,再取出偶数从小到大进行排序
: 运行时间限制: 10 Sec
: 内存限制: 128 MByte
: ...................
int main()
{
int a;
char test;
vector<int> arr1,arr2;
while( test != 10) //若捕获到结束符,跳出循环
{
cin>>a;
test = cin.get(); //用于捕获输入流中的结束符
cout<<"a = "<<a<<"\n"; //测试当前a的值
if(a%2==1)
arr1.push_back(a);
else
arr2.push_back(a);
}
sort(arr1.begin(),arr1.end(),cmp1);
sort(arr2.begin(),arr2.end(),cmp2);
for(int i=0;i<arr1.size();i++)
{
printf("%d ",arr1[i]);
}
for(int j=0;j<arr2.size();j++)
{
printf("%d ",arr2[j]);
}
printf("\n");
return 0;
}
while 循环只用于获取数字序列,把排序什么的拿出循环。 '>>'运算符是每循环一次从缓冲区里面提取一个数字,按照楼主的代码直接将排序拿出来的话,就没办法结束while循环的。我添加了一个char test ,用于捕获流中的结束符(enter 的ASC2值是10),作为结束while循环的条件。
说得很详细,赞!
【 在 playshady (这ID真逗) 的大作中提到: 】
: int main()
: {
: int a;
: ...................
通过『我邮2.0』发布