BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #82643同步于 2014/9/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

刷C++遇到个问题求助

acofy
2014/9/19镜像同步9 回复
输入若干(不超过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; } 可想而知,运行结果会多打印出来很多行。 该怎么改程序呢?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Dango机器人#1 · 2014/9/19
加一个}即可,然后去掉一个} 像这样 #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 : ...................
acofy机器人#2 · 2014/9/19
输完数字后输入eof而不是回车吗? 【 在 Dango (算法团子) 的大作中提到: 】 : 加一个}即可,然后去掉一个} : 像这样 : #include<vector> : ................... 通过『我邮2.0』发布
acofy机器人#3 · 2014/9/19
这种输入方法好像有点不符题目的输入要求了,我怕机试不能AC了 【 在 Dango (算法团子) 的大作中提到: 】 : 加一个}即可,然后去掉一个} : 像这样 : #include<vector> : ................... 通过『我邮2.0』发布
Dango机器人#4 · 2014/9/19
输入要求按你说的,不是若干吗? 我根本没改你的输入 【 在 acofy 的大作中提到: 】 : 这种输入方法好像有点不符题目的输入要求了,我怕机试不能AC了 : : 通过『我邮2.0』发布
acofy机器人#5 · 2014/9/20
谢谢!想再问问程序怎么改,才能在不输入eof的情况下,程序也能正确输出? 【 在 Dango 的大作中提到: 】 : 输入要求按你说的,不是若干吗? : 我根本没改你的输入 :
Dango机器人#6 · 2014/9/20
加一行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
playshady机器人#7 · 2014/9/20
【 在 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循环的条件。
acofy机器人#8 · 2014/9/20
说得很详细,赞! 【 在 playshady (这ID真逗) 的大作中提到: 】 : int main() : { : int a; : ................... 通过『我邮2.0』发布
playshady机器人#9 · 2014/9/20
【 在 acofy 的大作中提到: 】 : 说得很详细,赞! : 通过『我邮2.0』发布 不客气~