C++ /c 给出n和n个整数,希望你n个数从小到大排序给他们排序?

输入n(n&=100)个整数,依照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等 - C++当前位置:& &&&输入n(n&=100)个整数,依照绝对值从大到小排序后输入n(n&=100)个整数,依照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等&&网友分享于:&&浏览:65次输入n(n&=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等#include&&stdio.h&
int&main()
{&int&a[100],b,c,n,k,i,t;
&&while(scanf("%d",&n)!=EOF)
&&&&for(b=0;b&n;b++)
&&&&&&scanf("%d",&a[b]);
&for(c=0;c&n-1;c++)
&&&&&&&k=c;
&&&&&&&for(i=c+1;i&n;i++)
&&&&&&&&&&&if(a[k]*a[k]&a[i]*a[i])
&&&&&&&&&&&&k=i;
&&&&&&&&&&&if(k!=c)
&&&&&&&&&&&{
&&&&&&&&&&&&&&&t=a[c];
&&&&&&&&&&&&&&&a[c]=a[k];
&&&&&&&&&&&&&&&a[k]=t;
&&&&&&&&&&&}
&&&&for(c=n-1;c&=0;c--)
&&&&printf("%d&",a[c]);
&&&&printf("\n");
&&return&0;
运用选择排序,不知道为什么,输入3&1&0&-1时,排不成1&-1&0这种样子。求高手指点------解决方案--------------------
#include&&stdio.h&
int&main()
int&a[100],b,c,n,k,i,t;
while(scanf("%d",&n)&!=&EOF)
for(b&=&0;&b&&&n;&b++)
scanf("%d",&&a[b]);
for(c&=&0;&c&&&n-1;&c++)
for(i&=&c&+&1;&i&&&n;&i++)
if(a[k]&&&a[i])
if(k&!=&c)
a[c]&=&a[k];
for(c&=&n-1;&c&&=&0;&c--)
printf("%d&",a[c]);
printf("\n");
------解决方案--------------------选择排序,值交换应该发生在全部数据比较完成一次以后。也即你的代码&
&&&&&&&&&&if(k!=c)&{
&&&&&&&&&&&&&&&&t=a[c];
&&&&&&&&&&&&&&&&a[c]=a[k];
&&&&&&&&&&&&&&&&a[k]=t;
&&&&&&&&&&&&}
要放到&for(i=c+1;i&n;i++)&{}&外边来,而不是内部------解决方案--------------------#include&&stdio.h&
int&main()
{&int&a[100],b,c,n,k,i,t,t1,t2;&//------------------------------------
&&while(scanf("%d",&n)!=EOF)
&&&&for(b=0;b&n;b++)
&&&&&&scanf("%d",&a[b]);
&for(c=0;c&n-1;c++)
&&&&&&&k=c;
&&&&&&&for(i=c+1;i&n;i++)
&&&&&&//&{&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//-------------------------------
&&&&&&&&&&&if((t1=a[k]*a[k])&(t2=a[i]*a[i])------解决方案--------------------t1==t2&&a[k]&a[i])&&//-----------------------
&&&&&&&&&&&&k=i;
&&&&&&&&&&&if(k!=c)
&&&&&&&&&&&{
&&&&&&&&&&&&&&&t=a[c];
&&&&&&&&&&&&&&&a[c]=a[k];
&&&&&&&&&&&&&&&a[k]=t;
&&&&&&&&&&&}
&&&&&&//&}&&//----------------------------------
&&&&for(c=n-1;c&=0;c--)
&&&&printf("%d&",a[c]);
&&&&printf("\n");
&&return&0;
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有#include&&stdio.h&
int&main()
&&int&m,n,a,b,c,q,h,r,t;
&&while&(scanf(&%d%d&,&n,&m)!=EOF)
&&&&int&a[n+1];
&&&&if(n==0&&&&m==0)
&&&&for(c=0;c&n-1;c++)
&&&&&&scanf(&%d&,&a[c]);
&&&&a[c+1]=m;
&&&&for(h=1;h&n+1;h++)
&&&&for(r=0;r&n+1-h;r++)
&&&&if(a[r]&a[r+1])
&&&&t=a[r];
&&&&a[r]=a[r+1];
&&&&a[r+1]=t;
&&&&if&(q==0)&&
&&&&&for(h=0;h&n+1;h++)
&&&&&&&&&printf(&&%d&,a[h]);
&&&&&&printf(&\n&);
&&&&&&&&&return&0;
Sample&Input
Sample&Output
我按照例子输入&&但是不知道怎么回事&&出来个32&&求大神指导
回复讨论(解决方案)
for(c=0;c&n-1;c++)
&&&&&&scanf(&%d&,&a[c]);
&&&&a[c+1]=m;
这是给数组赋值的吧?
这里赋值有错误,改为
for(c=0;c&n;c++)
&&&&&&scanf(&%d&,&a[c]);
&&&&a[c]=m;
下面两个for循环是排序的吧,但是题目都说了数组已经是有序的了,就不必再重新排序了,直接查找插入就行了吧。
这是插入排序的内循环中的内容。
直接查找,或者二分查找,然后插入适当的位置,插入前,此位置后的所有元素必须先后移。
二分查找。类似std::set
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛&的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试是程序员必须掌握的技能之一。
刚刚找了一下,题号是杭电2019.我写的代码纯粹是为了AC
就是输入一个数检测是否比X小,小则直接输出,如果第一个比X大的则先输出X,再输出数值,以后的数值只需输入输出。
不需要二分,浪费空间时间。你如果感觉别扭,你可以存在数组里输一个存一个,输完了也就存了。
附上刚写的代码
#include&&stdio.h&
int&main(int&argc,&char&*argv[])
int&n,i,x,temp,
while(scanf(&%d%d&,&n,&x)&&&&(n!=0&||&x!=0))
{&&&flag=0;
{printf(&%d\n&,x);
for(i=0;i&n;i++)
{scanf(&%d&,&temp);
if(temp&x&||&flag==1)
printf(&%d&,temp);
&&&&{printf(&%d&%d&,x,temp);
if(i!=n-1)
printf(&&&);
printf(&\n&);
刚刚找了一下,题号是杭电2019.我写的代码纯粹是为了AC
就是输入一个数检测是否比X小,小则直接输出,如果第一个比X大的则先输出X,再输出数值,以后的数值只需输入输出。
不需要二分,浪费空间时间。你如果感觉别扭,你可以存在数组里输一个存一个,输完了也就存了。
附上刚写的代码
#include&&stdio.h&
int&main(int&argc,&char&*argv[])
int&n,i,x,temp,
while(scanf(&%d%d&,&n,&x)&&&&(n!=0&||&x!=0))
{&&&flag=0;
{printf(&%d\n&,x);
for(i=0;i&n;i++)
{scanf(&%d&,&temp);
if(temp&x&||&flag==1)
printf(&%d&,temp);
&&&&{printf(&%d&%d&,x,temp);
if(i!=n-1)
printf(&&&);
printf(&\n&);
二分显然比你这个遍历比较次数少!
刚刚找了一下,题号是杭电2019.我写的代码纯粹是为了AC
就是输入一个数检测是否比X小,小则直接输出,如果第一个比X大的则先输出X,再输出数值,以后的数值只需输入输出。
不需要二分,浪费空间时间。你如果感觉别扭,你可以存在数组里输一个存一个,输完了也就存了。
附上刚写的代码
#include&&stdio.h&
int&main(int&argc,&char&*argv[])
int&n,i,x,temp,
while(scanf(&%d%d&,&n,&x)&&&&(n!=0&||&x!=0))
{&&&flag=0;
{printf(&%d\n&,x);
for(i=0;i&n;i++)
{scanf(&%d&,&temp);
if(temp&x&||&flag==1)
printf(&%d&,temp);
&&&&{printf(&%d&%d&,x,temp);
if(i!=n-1)
printf(&&&);
printf(&\n&);
二分显然比你这个遍历比较次数少!
我一个一个读数的时候就同时再输入,四个变量,没有数组,压根没遍历,在读完数据的时候就完事了、、、、、、你的二分输入数据读完再查找、移位,再输出。
刚刚找了一下,题号是杭电2019.我写的代码纯粹是为了AC
就是输入一个数检测是否比X小,小则直接输出,如果第一个比X大的则先输出X,再输出数值,以后的数值只需输入输出。
不需要二分,浪费空间时间。你如果感觉别扭,你可以存在数组里输一个存一个,输完了也就存了。
附上刚写的代码
#include&&stdio.h&
int&main(int&argc,&char&*argv[])
int&n,i,x,temp,
while(scanf(&%d%d&,&n,&x)&&&&(n!=0&||&x!=0))
{&&&flag=0;
{printf(&%d\n&,x);
for(i=0;i&n;i++)
{scanf(&%d&,&temp);
if(temp&x&||&flag==1)
printf(&%d&,temp);
&&&&{printf(&%d&%d&,x,temp);
if(i!=n-1)
printf(&&&);
printf(&\n&);
二分显然比你这个遍历比较次数少!
我一个一个读数的时候就同时再输入,四个变量,没有数组,压根没遍历,在读完数据的时候就完事了、、、、、、你的二分输入数据读完再查找、移位,再输出。
刚刚找了一下,题号是杭电2019.我写的代码纯粹是为了AC
就是输入一个数检测是否比X小,小则直接输出,如果第一个比X大的则先输出X,再输出数值,以后的数值只需输入输出。
不需要二分,浪费空间时间。你如果感觉别扭,你可以存在数组里输一个存一个,输完了也就存了。
附上刚写的代码
#include&&stdio.h&
int&main(int&argc,&char&*argv[])
int&n,i,x,temp,
while(scanf(&%d%d&,&n,&x)&&&&(n!=0&||&x!=0))
{&&&flag=0;
{printf(&%d\n&,x);
for(i=0;i&n;i++)
{scanf(&%d&,&temp);
if(temp&x&||&flag==1)
printf(&%d&,temp);
&&&&{printf(&%d&%d&,x,temp);
if(i!=n-1)
printf(&&&);
printf(&\n&);
二分显然比你这个遍历比较次数少!
&&我一个一个读数的时候就同时在输出,四个变量,没有数组,压根没遍历,在读完数据的时候就完事了、、、、、、你的二分输入数据读完再查找、移位,再输出。10:42 提问
C++编程:对数组A中的N(0&N&100)个整数从小到大进行连续编号
要求不能改变数组A中元素的顺序,且相同的整数要具有相同编号。
例如:数组A=(5,3,4,7,3,5,6)
则输出为:(3,1,2,5,1,3,4)
拜托拜托,求大神帮忙,注意是C++不是C语言,
按赞数排序
我觉的可以用打点法,申请同样大小的数组,完后把编号填入有数字的对应新申请的数组中,内容加加,就可以了
我觉的可以用打点法,申请同样大小的数组,完后把编号填入有数字的对应新申请的数组中,内容加加,就可以了
这道简单题,主要考的问题就是排序。
然后拓展,对排序之后的顺序加编号(用map就可以记录)。
最后就是给原数组添加编号了。
当然,这里需要三个N大小的数组,
第一个,存储原数组。
第二个,存储排序后的数组。
第三个,存储最后的编号。
小提示:注意有重复数字情况。WenryXu 的BLOG
用户名:WenryXu
文章数:26
访问量:3155
注册日期:
阅读量:5863
阅读量:12276
阅读量:412202
阅读量:1100244
[匿名]解答问题:
51CTO推荐博文
题目描述&Description
给出n和n个整数,希望你从小到大给他们排序
输入描述&Input Description
第一行一个正整数n
第二行n个用空格隔开的整数
输出描述&Output Description
输出仅一行,从小到大输出n个用空格隔开的整数
样例输入&Sample Input
样例输出&Sample Output
数据范围及提示&Data Size & Hint
1&=n&=100000
WIKIOI难度等级:通过初赛
总耗时:717ms &内存占用:0kb &语言:C++ &代码:652B
一开始选择使用了冒泡排序,排序算法使用了&里面修改后的那段代码,WA
然后用了更简单的冒泡排序代码:&结果TLE了
只好选择更好的算法了,用shell排序,下面就是AC的代码
#include&&iostream&&&&using&namespace&&&&void&bubble(int&n)&{&&&&&int&i,j,k,x;&&&&&int&a[n];&&&&&&&for(i=0;i&n;i++)&&&&&{&&&&&&&&&cin&&a[i];&&&&&}&&&&&&&&k=n/2;&&&&&&while(k&=1)&&&&&&{&&&&&&&&&&for(i=k;i&n;i++)&&&&&&&&&&{&&&&&&&&&&&&&&x=a[i];&&&&&&&&&&&&&&j=i-k;&&&&&&&&&&&&&&while(j&=0&&x&a[j])&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&a[j+k]=a[j];&&&&&&&&&&&&&&&&&&j-=k;&&&&&&&&&&&&&&}&&&&&&&&&&&&&&a[j+k]=x;&&&&&&&&&&}&&&&&&&&&&k/=2;&&&&&&}&&&&&&&for(i=0;i&n;i++)&&&&&{&&&&&&&&&cout&&a[i];&&&&&&&&&if(i!=(n-1))&&&&&&&&&{&&&&&&&&&&&&&cout&&&&&;&&&&&&&&&}&&&&&}&}&&&int&main(int&argc,char&*argv[])&{&&&&&int&n;&&&&&&&cin&&n;&&&&&&&bubble(n);&&&&&&&return&0;&&}&
一个朋友的AC
总耗时:1344ms & 内存占用:5812kb &语言:C++ &代码:610B
#include&iostream&&using&namespace&&int&main()&{void&shell&(int&a[],int&n);&&&&&int&a[10000];&&&&&int&i,n,b,&&&&&cin&&n;&&&&&for(i=0;i&n;i++)&&&&&cin&&a[i];&&&&&shell(a,n);&&&&&&&for(i=0;i&n;i++)&&&&&{&&&&&&&&&cout&&a[i]&&&&&;&&&&&}&&&&&cout&&&}&void&shell(int&a[],int&n)&&{&&&&&&int&i,j,k,x;&&&&&&k=n/2;&&&&&&while(k&=1)&&&&&&{&&&&&&&&&&for(i=k;i&n;i++)&&&&&&&&&&{&&&&&&&&&&&&&&x=a[i];&&&&&&&&&&&&&&j=i-k;&&&&&&&&&&&&&&while(j&=0&&x&a[j])&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&a[j+k]=a[j];&&&&&&&&&&&&&&&&&&j-=k;&&&&&&&&&&&&&&}&&&&&&&&&&&&&&a[j+k]=x;&&&&&&&&&&}&&&&&&&&&&k/=2;&&&&&&}&&}&
本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)}

我要回帖

更多关于 n个数从小到大排序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信