| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 658 人关注过本帖
标题:求助,谁帮忙看看这道题有没更简单的做法
只看楼主 加入收藏
CrazyChild
Rank: 1
来 自:广东汕头
等 级:新手上路
帖 子:21
专家分:2
注 册:2010-12-31
结帖率:100%
收藏
 问题点数:0 回复次数:7 
求助,谁帮忙看看这道题有没更简单的做法
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:1.输入10个数;2.进行处理;3.输出10个数。
下面是我自己写的代码,感觉好像有点繁琐,而bg搜到的有些代码还是有问题的。谁能指点下?
程序代码:
#include<iostream>
#define N 10
using namespace std;
void input(int *, int);
void output(int *, int);
void pro(int *, int);
int main()
{
    int a[N];
    input(a, N);
    pro(a, N);
    output(a, N);
    return 0;
}
void input(int *pa, int n)
{
    cout << "请输入十个数字:";
    for(int i = 0; i < n; i++)
        cin >> *(pa + i);
}
void output(int *pa, int n)
{
    cout << "处理的结果为:";
    for(int i = 0; i < n; i++)
        cout << *(pa + i) << " ";
    cout << endl;
}
void pro(int *pa, int n)
{
    int *min, *max, i, temp;
    min = max = pa;
    for(i = 0; i < n; i++)
    {
        if(*min > *(pa + i))    min = pa + i;
        else if(*max < *(pa + i))    max = pa + i;
    }
    if(max == pa && min == pa + n - 1)
    {
        temp = *pa;
        *pa = *(pa + n - 1);
        *(pa + n - 1) = temp;
    }
    else if(max == pa)
    {
        temp = *pa;
        *pa = *min;
        *min = temp;
        temp = *(pa + n - 1);
        *(pa + n - 1) = *min;
        *min = temp;
    }
    else if(min == pa + n - 1)
    {
        temp = *(pa + n - 1);
        *(pa + n - 1) = *pa;
        *pa = temp;
        temp = *(pa + n - 1);
        *(pa + n - 1) = *max;
        *max = temp;
    }
    else
    {
        temp = *pa;
        *pa = *min;
        *min = temp;
        temp = *(pa + n - 1);
        *(pa + n - 1) = *max;
        *max = temp;
    }
}

 
搜索更多相关主题的帖子: 最大的 
2011-02-12 16:31
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:0 
知道也不告诉你
2011-02-12 17:04
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
这里涉及它们之间有没有相互影响
程序代码:
#include<iostream>
#define N 10
using namespace std;
void input(int *, int);
void output(int *, int);
void pro(int *, int);
int main()
{
    int a[N];
    input(a, N);
    pro(a, N);
    output(a, N);
    return 0;
}
void input(int *pa, int n)
{
    cout << "请输入十个数字:";
    for(int i = 0; i < n; i++)
        cin >> *(pa + i);
}
void output(int *pa, int n)
{
    cout << "处理的结果为:";
    for(int i = 0; i < n; i++)
        cout << *(pa + i) << " ";
    cout << endl;
   
}
void pro(int *pa, int n)
{
    int *min, *max, i, temp;
    min = max = pa;
    for(i = 0; i < n; i++)
    {
        if(*min > *(pa + i)) 
            min = pa + i;
    }
   
    temp = * min;
    *min = pa[0];
    pa[0] = temp;

        for(i = 0; i < n; i++)
    {
         if(*max < *(pa + i))
             max = pa + i;
    }

    temp = * max;
    *max = pa[n-1];
    pa[n-1] = temp;
}



小代码,大智慧
2011-02-12 17:04
nwpu063417
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:428
专家分:28
注 册:2007-5-11
收藏
得分:0 
程序代码:
void swap(int *pa, int ia, int ib)
{
    int temp = pa[ia];
    pa[ia] = pa[ib];
    pa[ib]  = temp;
}

void proc(int *pa, int n)
{
    int i_min, i_max;
    int max, min;
    int i;

    i_min = i_max = 0;
    min = max = pa[0];
    for (i = 1; i < n; i++)
    {
        if (pa[i] > max)
        {
            max = pa[i];
            i_max = i;
        }
        if (pa[i] < min)
        {
            min = pa[i];
            i_min = i;
        }
    }

    swap(pa, 0, i_min);
    (i_max == 0) ? swap(pa, i_min, 9) : swap(pa, i_max, 9);
}
我也贴一个~

2011-02-12 17:11
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
收藏
得分:0 
根据四楼的算法改进
程序代码:
#include<iostream>
#define N 10
using namespace std;
void input(int *, int);
void output(int *, int);
void pro(int *, int);
int main()
{
    int a[N];
    input(a, N);
    pro(a, N);
    output(a, N);
    getchar();
    getchar();
    return 0;
}
void input(int *pa, int n)
{
    cout << "请输入十个数字:";
    for(int i = 0; i < n; i++)
        cin >> *(pa + i);
}
void output(int *pa, int n)
{
    cout << "处理的结果为:";
    for(int i = 0; i < n; i++)
        cout << *(pa + i) << " ";
    cout << endl;
  
}
void pro(int *pa, int n)
{
    int *min, *max, i, temp;
    min = max = pa;
    for(i = 0; i < n; i++)
    {
        if(*min > *(pa + i))
            min = pa + i;
        if(*max < *(pa + i))
            max = pa + i;
    }
  
    temp = * min;  //先排最小
    *min = pa[0];
    pa[0] = temp;

    if(max == pa)  //判断最大值在数组第一个情况
    {
      temp = * min;
      *min = pa[n-1];
      pa[n-1] = temp;
    }
    else
    {
      temp = * max;
      *max = pa[n-1];
      pa[n-1] = temp;
    }
}

测试代码:
        8 1 2 3 0 7 6 5 4 4
        9 8 7 6 5 4 3 2 1 0
        0 1 2 3 4 5 6 7 8 9
        ...
当然这个也可以先排最大,算法没有差别

[ 本帖最后由 点线面 于 2011-2-12 18:08 编辑 ]
收到的鲜花
  • CrazyChild2011-02-12 19:24 送鲜花  3朵   附言:我很赞同

小代码,大智慧
2011-02-12 17:56
baobaoisme
Rank: 7Rank: 7Rank: 7
来 自:AVATAR
等 级:黑侠
帖 子:260
专家分:506
注 册:2010-7-9
收藏
得分:0 
改良版的直接选择排序。我也随便写了一个。
程序代码:
#include <stdio.h>

int main()
{
    int Sort(int *);
    int input(int *);
    int output(int *);
    int a[10];
    input(a);
    Sort(a);
    output(a);
    return 0;
}
int Sort(int *a)
{
    int *p1,*p2,i,*pos,*low,temp,*high,Min,Max;
    p1=p2=low=a;
    for (i=0;i<10;i++)
        p2++;
    p2--;
    high=p2;
    while (p1<p2)
    {
        //寻找当前无序区间最小值
        Min=*low;
        pos=low;
        while (low<=p2)
        {
            if (*low<Min)
            {
                pos=low;
                Min=*low;
            }
            low++;
        }
        //交换
        temp=*pos;
        *pos=*p1;
        *p1=temp;

        p1++;
        low=p1;

        //寻找当前无序区间最大值
        Max=*high;
        pos=high;
        while (high>=p1)
        {
            if (*high>Max)
            {
                pos=high;
                Max=*high;
            }
            high--;
        }
        //交换
        temp=*pos;
        *pos=*p2;
        *p2=temp;

        p2--;
        high=p2;
    }
    return 0;
}
int input(int *a)
{
    int i;
    for (i=0;i<10;i++)
        scanf("%d",a+i);
    putchar('\n');
    return 0;
}
int output(int *a)
{
    int i;
    for (i=0;i<10;i++)
        printf("%d ",*(a+i));
    return 0;
}
2011-02-12 18:45
CrazyChild
Rank: 1
来 自:广东汕头
等 级:新手上路
帖 子:21
专家分:2
注 册:2010-12-31
收藏
得分:0 
回复 6楼 baobaoisme
要的不是排序额
2011-02-12 19:23
baobaoisme
Rank: 7Rank: 7Rank: 7
来 自:AVATAR
等 级:黑侠
帖 子:260
专家分:506
注 册:2010-7-9
收藏
得分:0 
额。。。不好意思,理解错误····不过思想相同啦,只需进行第一次循环就达到你要说的了。。。
2011-02-12 19:26
快速回复:求助,谁帮忙看看这道题有没更简单的做法
数据加载中...
 
   



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

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