| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10519 人关注过本帖
标题:输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。 ...
只看楼主 加入收藏
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
结帖率:95.37%
收藏
已结贴  问题点数:20 回复次数:14 
输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。(如果这个第一个数就是最小的数,则保持原样输出,如果最小的数有相同的按照前面
#include <stdio.h>
int main()
{
    int n,i,t,min,k,j;
    while(scanf("%d",&n)&&n!=0)
    {
        int a[n];
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        for(i=0;i<n-1;i++)
            for(j=i+1;j<n;j++)
                if(a[i]>a[j])
                {
                    t=a[j];
                    min=j;
                }
        k=a[0];
        a[0]=t;
        a[min]=k;
        for(i=0;i<n;i++)
            printf("%d ",a[i]);
        printf("\n");
    }
    return 0;
}
我测试的结果没错,但是提交总是提示错误,请各位帮帮忙看看是什么原因。
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 最小 输出 int for i++ 
2017-11-18 00:17
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:10 
8 3 3 1 2 6 7 9 3(测试数据)

3 3 1 2 6 7 9 3(输出)
你试试。
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2017-11-18 00:33编辑过]

2017-11-18 00:28
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 2楼 zbjzbj
图片附件: 游客没有浏览图片的权限,请 登录注册
我的这没问题。。,这是怎么回事。
2017-11-18 21:44
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:0 
为什么不按我给出的数据测试?
2017-11-18 22:08
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:10 
楼主最好贴一下题目, 题目是否对输入输出格式有所要求?
如果就只有一个数呢?  还有那个if( ){ ...  ...}写的不对
就在你原来基础上改
程序代码:
#include <stdio.h>
int main()
{
    int n, i, t, min, k, j;
    while (scanf("%d", &n) && n != 0)
    {
        // int *a = (int *)malloc(sizeof(int)*n);
        int a[n];
        for (i = 0; i<n; i++)
            scanf("%d", &a[i]);
        min = a[0];
        t = a[0];
        for (i = 0; i<n - 1; i++)
            for (j = i + 1; j<n; j++)
                if (a[i]>a[j] && t>a[j])
                {
                    t = a[j];
                    min = j;
                }
        k = a[0];
        a[0] = t;
        a[min] = k;
        for (i = 0; i<n; i++)
            printf("%d ", a[i]);
        printf("\n");
    }
    //system("pause");
    return 0;
}



早知做人那么辛苦!  当初不应该下凡
2017-11-18 22:20
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 4楼 zbjzbj
我测试了你的数据。输出和输入一样,
2017-11-18 22:37
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
int *a = (int *)malloc(sizeof(int)*n);
这句不写可以吗?
还有这句if (a>a[j] && t>a[j]t>a[j])什么意思

原题及要求
描述
输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。(如果这个第一个数就是最小的数,则保持原样输出,如果最小的数有相同的按照前面的交换)
输入
输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。
输出
对于每组输入数据,输出交换后的数列,每组输出占一行。
样例输入
4 2 1 3 4
5 5 4 3 2 1
0
样例输出
1 2 3 4
1 4 3 2 5
2017-11-18 22:43
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:0 
定义数组时候,数组大小不可以用变量表示, 你用的是Dev c++么?
//  int *a = (int *)malloc(sizeof(int)*n);  写这句只是为了我这边好测试,你可以那儿可以不写。

 if(a[i]>a[j])
 {
       t=a[j];
       min=j;
  }
你写的两个for循环,从头开始选择一个数不断比较这个数与它之后的数大小, 那么只要if条件满足, min和t就得更新。
就保证不了 min是最小的。 你仔细想想。
可以这样来,一次循环,不断更新最小值及下标即可
程序代码:
#include <stdio.h>

int main()
{
    int n;
    int i, min, k, t=0;

    while (scanf("%d", &n) && n != 0) 
    {
        int a[n];
        for (i = 0; i < n; i++) 
        {
            scanf("%d", &a[i]);
        }
    
        min = a[0];             //假定第一个是最小的
        for (i = 0; i < n; i++)
        {
            if (min > a[i])   
            {
                min = a[i];
                t = i;
            }
        }

        k = a[0];
        a[0] = min;
        a[t] = k;
        for (i = 0; i < n-1; i++)
        {
            printf("%d ", a[i]);
        }
        printf("%d\n", a[n - 1]);  //题目要求换行
    }

    return 0;
}



[此贴子已经被作者于2017-11-18 23:27编辑过]


早知做人那么辛苦!  当初不应该下凡
2017-11-18 23:24
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:0 
回复 8楼 炎天
恩 懂了,用的是devc++怎么了?
2017-11-18 23:49
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:0 
dev c++应该没问题,我用的就是这个。
相当于tc的升级版,使用简单。复杂的编程用ms VS。
注意编程的时候首先是逻辑正确,然后才是代码问题,代码绩效可以不作为重点。
2017-11-19 00:11
快速回复:输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些 ...
数据加载中...
 
   



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

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