| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1350 人关注过本帖
标题:[求助2]指针,看下错哪了。
只看楼主 加入收藏
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
结帖率:86.67%
收藏
 问题点数:0 回复次数:26 
[求助2]指针,看下错哪了。

输入10个数,找出最大数,放在第一,原来第一的在第二````依次类推。

怎么我的只是覆盖了第一个
并且最大数还存在上次位置,指到我晕了。

#include<iostream>
using namespace std;
int main()
{
const int max=10;
int a[max];
int *p=a;
int i,j,k,t;

cout<<"Enter the array number:";
for(i=0;i<max;i++)
{
cin>>a[i];
}

for(i=0;i<max;i++){
for(j=0;j<max;j++)
k=j+1;
if(*(p+j)<*p+k)
*(p+j)=*(p+k);//这里为什么不是每次上一数覆盖下一个数?
*p=*(p+j);
}

for(i=0;i<max;i++)
cout<<a[i]<<' ';
cout<<endl;
return 0;
}

[此贴子已经被作者于2007-7-27 2:30:33编辑过]

搜索更多相关主题的帖子: 指针 
2007-07-27 02:28
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
*(p+j)=*(p+k);//这里为什么不是每次上一数覆盖下一个数?
*p=*(p+j);

错!

自我放逐。。。
2007-07-27 07:22
wtyj112
Rank: 1
等 级:新手上路
帖 子:222
专家分:0
注 册:2007-5-9
收藏
得分:0 

首先你给的描述有歧义,然后你给的程序有错误和不清晰的地方。
我猜测你是想写个冒泡排序,将你的程序更改如下:输入1 2 3 4 5 得到 5 4 3 2 1。
#include<iostream>
using namespace std;
int main()
{
const int max=5;
int a[max];
int *p=a;
int i,j,k,t;

cout<<"Enter the array number:";
for(i=0;i<max;i++)
{
cin>>a[i];
}

for(i=0;i<max;i++){
for(j=0;j<max-1-i;j++)
{
k=j+1;
if(*(p+j) < *(p+k))
{
t = *(p+j);
*(p+j) = *(p+k);
*(p+k) = t;

//*(p+i) = *(p+j);
}
}
}

for(i=0;i<max;i++)
cout<<a[i]<<' ';
cout<<endl;
return 0;
}


计算机之路是痛苦并快乐着的!!
2007-07-27 08:16
wtyj112
Rank: 1
等 级:新手上路
帖 子:222
专家分:0
注 册:2007-5-9
收藏
得分:0 
这个是没for一趟就把最小的放在最后
如果要改成最大放第一 稍微改改就ok了

计算机之路是痛苦并快乐着的!!
2007-07-27 08:20
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
收藏
得分:0 
回复:(wtyj112)首先你给的描述有歧义,然后你给的程...
不是写冒泡哦。

比如:8 6 1 2 9 3
只需 9 8 6 1 2 3

2007-07-27 12:57
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
收藏
得分:0 
以下是引用福尔摩斯在2007-7-27 7:22:07的发言:
*(p+j)=*(p+k);//这里为什么不是每次上一数覆盖下一个数?
*p=*(p+j);

错!

我知道错啊,指点下啊


2007-07-27 12:59
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
数据结构:冒泡算法

自我放逐。。。
2007-07-27 13:21
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
得分:0 

#include<iostream>
using namespace std;
int main()
{
const int max=10;
int a[max];
int *p=a;
int i,t;

cout<<"Enter the array number:";
for(i=0;i<max;i++)
{
cin>>a[i];

}

t= a[0];
for(i=1;i<max;i++)
{
if(t<*(p+i))
t=*(p+i);
}

while(a[i]=t)
{
i--;
}

for(;i>0;i--)
a[i]=a[i-1];
a[0]=t;


for(i=0;i<max;i++)
cout<<a[i]<<' ';
cout<<endl;
return 0;
}

不知对不对,我这没有编译器.你试一试吧.


2007-07-27 15:48
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 

最简单的方法:
另建一个数组..
先找最大数放到第一个..然后把剩下的数放过去(跳过原来最大的那个)...


女侠,约吗?
2007-07-27 18:48
wtyj112
Rank: 1
等 级:新手上路
帖 子:222
专家分:0
注 册:2007-5-9
收藏
得分:0 

#include<iostream>
using namespace std;
int main()
{
const int max=6;
int a[max];
int *p=a;
int i,j,value;
int index = 0;

cout<<"Enter the array number:";
for(i=0;i<max;i++)
{
cin>>a[i];
}
value = a[0];

for (j=1; j<max; j++)
{
//=j+1;
if(value < *(p+j))
{
value = *(p+j);
index = j;
}
}

while ( index > 0 )
{
a[index] = a[index - 1];
a[index - 1] = value;
index--;
}

for(i=0;i<max;i++)
cout<<a[i]<<' ';
cout<<endl;
return 0;
}

基本想法找到最大,记录最大值和索引号,然后移动数组元素。


计算机之路是痛苦并快乐着的!!
2007-07-27 19:34
快速回复:[求助2]指针,看下错哪了。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025772 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved