| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 373 人关注过本帖
标题:请各位看下我这个程序哪里错了
只看楼主 加入收藏
沉小默言
Rank: 2
等 级:论坛游民
帖 子:15
专家分:11
注 册:2011-5-27
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:8 
请各位看下我这个程序哪里错了
#include <stdio.h>

int main()
{
    int n,a[105],i,min,t;
   
    while(scanf("%d",&n)!=EOF)
    {
        if (n==0)
        break;
        if (n>0&&n<100)
        {         
                scanf("%d",&a[0]);
                min=t=a[0];
                for(i=1; i<n; i++)
                {
                  scanf("%d",&a[i]);
                       if(min>a[i])
                          min=a[i];
                }
                a[0]=min;
                a[i]=t;
               
        for (i=0; i<n-1; i++)
            printf("%d ",a[i]);
        printf("%d\n",a[n-1]);
        }
    }
    return 0;
}

这里要求的是找到最小的一个数与第一个数交换,可我交换之后第一个数就直接被替代了。
例如Input  4 2 1 3 4
   output  1 2 3 4
虽然很简单,但我看了好久没解决。请大家帮帮忙,谢谢了。
2011-05-28 10:11
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:10 
程序代码:
root@~ #cat t.c
#include <stdio.h>

int main (void) {

        int a[105],i,j,n,min,temp;

//when press ctrl+D finish input
        for(i=0;i<105;i++) {
                if(scanf("%i",&n)==EOF)
                        break;
                a[i]=n;
        }

//display
        for(n=0;n<i;n++) {
                printf("%i ",a[n]);
        }
        printf("\n");

//find min and pos
        min=a[0];
        for(n=0;n<i;n++) {
                if(a[n]<min) {
                        min=a[n];
                        j=n;
                }
        }

//swap
        temp=a[0];
        a[0]=min;
        a[j]=temp;

//display
        for(n=0;n<i;n++) {
                printf("%i ",a[n]);
        }
        printf("\n");

        return 0;

}

root@~ #./t
4 2 1 3 4 0
4 2 1 3 4 0
0 2 1 3 4 4
root@~ #./t
4 2 1 3 4
4 2 1 3 4
1 2 4 3 4
root@~ #

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-05-28 10:32
沉小默言
Rank: 2
等 级:论坛游民
帖 子:15
专家分:11
注 册:2011-5-27
收藏
得分:0 
回复 2楼 ansic
请问一下,这个程序为什么在DevC++里没有输出结果啊。
还有对于第一步的做法我不太懂。。。
2011-05-28 10:45
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
以下是引用沉小默言在2011-5-28 10:45:42的发言:

请问一下,这个程序为什么在DevC++里没有输出结果啊。
还有对于第一步的做法我不太懂。。。

第一步就是先把输入的数据放在数组里, 遇到ctrl+D的时候结束输入。

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-05-28 10:51
键盘农夫
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:88
专家分:106
注 册:2011-5-5
收藏
得分:10 
这样简洁
while((scanf("%d",&n)!=EOF)&& (n>0&&n<100) )
{
 
}

《狂人C:程序员入门必备》
2011-05-28 10:58
键盘农夫
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:88
专家分:106
注 册:2011-5-5
收藏
得分:0 
回复 楼主 沉小默言
a[i]=t;
这个已经越界了

《狂人C:程序员入门必备》
2011-05-28 10:59
沉小默言
Rank: 2
等 级:论坛游民
帖 子:15
专家分:11
注 册:2011-5-27
收藏
得分:0 
回复 4楼 ansic
#include <stdio.h>

int main()
{
    int n,a[105],i,min,t,j;
   
    while(scanf("%d",&n)!=EOF)
    {
        if (n==0)
        break;
        if (n>0&&n<100)
        {         
                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];
                           j=i;
                          }
                  }
               
                t=a[0];
                a[0]=min;
                a[j]=t;
               
                for (i=0; i<n; i++)
                    printf("%d ",a[i]);
                printf("\n");
        }
    }
    return 0;
}


这个是我看了你的后改过的我的代码。输出值已经正确了。
但是在提交的时候还是wrong answer,你能帮我看看吗?
是杭电OJ的2016 题。
感谢啊。。。
2011-05-28 10:59
沉小默言
Rank: 2
等 级:论坛游民
帖 子:15
专家分:11
注 册:2011-5-27
收藏
得分:0 
回复 6楼 键盘农夫
越界啊?那该怎么改啊。
2011-05-28 11:00
沉小默言
Rank: 2
等 级:论坛游民
帖 子:15
专家分:11
注 册:2011-5-27
收藏
得分:0 
回复 5楼 键盘农夫
哦,谢谢提醒哈。
2011-05-28 11:01
快速回复:请各位看下我这个程序哪里错了
数据加载中...
 
   



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

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