C++ 将n个数按输入时的顺序逆序排出时遇到的问题

问题描述

C++ 将n个数按输入时的顺序逆序排出时遇到的问题

//将n个数按输入时的顺序逆序排出
void sort(int *p,int n)

{

int *p1,*p2,temp;

for(int i=0;i<n/2;i++)

 {
  p1=p+i;//
  p2=p+(n-1-i);//这两句为什么可以这么写??具体是什么意思?半懂不懂···
  temp=*p1;
  *p1=*p2;
  *p2=temp;
 }

}
int main()
{
int n,*p,num[20];
cin>>n;
int i;
for(i=0;i
{
cin>>num[i];
}
p=&num[0];
sort(p,n);
for( i=0;i<n;i++)
{
cout<<num[i]<<" ";
}
return 0;

}

ps:不用指针的话有更好的办法吗?

解决方案

 交换p[i]和p[n-1-i]
p[i]也可以写成p+i。
比如
0 1 2 3 4 5
n=6
那么交换 0(0) 5(6-1-0)
1(1) 4(6-1-1)
2 3
得到
5 4 3 2 1 0

解决方案二:

相当于把数组第一个元素和最后一个元素做交换,依次进行
p1=p+i;// 数组第一个元素地址
p2=p+(n-1-i);//数组最后一个元素地址

解决方案三:

p1=p+i;p2=p+(n-1-i);
p1,p2是两个指针,指向待交换的两个数字的空间,后面再做交换。
就像楼上所说的,可以把一级指针当成一个一维数组,按照数组的方式来书写。

解决方案四:

p1=p+i;//p是一个指针,就是指向一个地址,加1就指向它后面第一个地址,加2就指向它的后面的第二个地址
p2=p+(n-1-i);//同理

解决方案五:

把第一个数和最后一个交换,然后把第二个数和倒数第二个数交换,....... 最后输出的就是你想要的喽。

时间: 2024-10-24 06:24:29

C++ 将n个数按输入时的顺序逆序排出时遇到的问题的相关文章

顺序栈入栈时输入入栈元素回车之后不能够运行,需要再输入个字节才能运行。预计主函数存在问题。

问题描述 顺序栈入栈时输入入栈元素回车之后不能够运行,需要再输入个字节才能运行.预计主函数存在问题. #include #include #define MAXSIZE 100 //顺序栈的存储空间的初始分配量 #define SElemType int typedef struct { SElemType *base; SElemType *top; int stacksize; } SqStack; //栈的初始化 void InitStack(SqStack *S) { S->base=(

我的网站 在注册 会员时填写完资料 点提交时 有问题!

问题描述 网页提示在conn.execute("Insertintoduanxin(bt,nr,name1,name2,lx)values('欢迎注册成为"&my_name&"一站通会员','"&my_name&"全体工作人员欢迎您的到来,<br>如有任何疑问请参看网站"帮助"或及时联系"&my_name&"客服中心工作人员.<br>感谢您注册成

jquery 文本框点击时文字消失,失去焦点时文字出现

js实现代码:  代码如下 复制代码 <input type="text" value="不推荐这么做" onfocus="if(this.value == '不推荐这么做') this.value = ''" onblur="if(this.value == '') this.value = '不推荐这么做'" /> 我是非常反对把 javascript 写在 html 标签里的,这和 style 写在 html

js文本框点击时文字消失,失去焦点时文字出现

方法一,直接在input中直接  代码如下 复制代码 <input type="text" onfocus="if(this.value=='指中我看看什么效果') this.value='';" onblur="if(this.value=='') this.value='指中我看看什么效果';" value="指中我看看什么效果" style="color:#666" size="6&q

C++输入一个字符串,把其中的字符按照逆序输出的两种方法解析

以下是对C++中输入一个字符串,把其中的字符按照逆序输出的两种方法进行了详细的分析介绍,需要的朋友可以过来参考下   用字符数组方法:基本思路是,先判断字符的结束标志'',然后从该位置向前输出.实现代码: 复制代码 代码如下: #include<iostream> using namespace std; int main(){  char a[50];  cout<<"please input a string:";  cin>>a;  int i

在使用websphere时,报错使用 LTPA 时认证失败。异常为 &amp;amp;lt;null&amp;amp;gt;

问题描述 在使用websphere时,报错使用 LTPA 时认证失败.异常为 <null> [15-3-10 11:11:30:943 CST] 00000047 SystemErr R com.ibm.websphere.wim.exception.PasswordCheckFailedException: CWWIM4537E 对于"eoms"主体名称,找不到主体.

百度导航初始化引擎时成功,在启动导航时就直接报错了,下面是错误信息

问题描述 百度导航初始化引擎时成功,在启动导航时就直接报错了,下面是错误信息 错误提示信息:08-25 10:09:43.560 13750-13750/com.allan.nvigtive.gps E/Jni_JniEngine﹕ ######## Java_com_baidu_AppTest_AppTest JNI_OnLoad08-25 10:09:43.560 13750-13750/com.allan.nvigtive.gps E/Jni_JniEngine﹕ ######## Jav

caffe data layer-caffe输入的data顺序会被随机打乱吗?

问题描述 caffe输入的data顺序会被随机打乱吗? caffe输入的data顺序会被随机打乱吗?是data层打乱的,还是生成lmdb的时候打乱的?

设计鲁棒性的方法:输入一个链表的头结点,逆序遍历打印该链表出来

之前有过整理链表等的概念和基本算法.比较重要的是插入,删除,遍历,建表(尾插法,头插法) 回忆链表尾部插入结点: 1 #include <iostream> 2 using namespace std; 3 4 typedef struct Node{ 5 int data;//数据域 6 Node *next;//指针域 7 } Node, *List; 8 9 //在单链表的末位添加一个结点 10 void addNode(List *head, int value) 11 { 12 //