| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1467 人关注过本帖
标题:为什么不能将 k=i 和 k=j 换成两个 k=两个常数?
只看楼主 加入收藏
licai123
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-8-6
结帖率:100%
收藏
 问题点数:0 回复次数:7 
为什么不能将 k=i 和 k=j 换成两个 k=两个常数?
/*将输入的10个数按升序排列*/

#include<stdio.h>
int main()
{
 int a[10],temp;
 int i,j,k;
 for(i=0;i<10;i++)
  scanf("%d",&a[i]);
 for(i=0;i<9;i++)
 {
  k=i;             //疑惑1:可不可以将改成k=100;
  for(j=i+1;j<10;j++)
   if(a[j]>a[k])
    k=j;       //疑惑二:可不可以改为k=99;

  if(i!=k)   
  {
   temp=a[k];
   a[k]=a[i];
   a[i]=temp;
  }
 }
 for(i=0;i<10;i++)
  printf("降序排列为:%d\n",a[i]);
 return 0;
}
2014-08-12 17:52
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
a[100] = ???

小建议:从排序手法上有些接近插入法,类似这样的问题还是看看专门讲算法的书籍,会少走很多弯路,毕竟前人已经无数次地验证过了,呵呵

梦想拥有一台龙芯3A-4000
2014-08-12 18:27
licai123
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-8-6
收藏
得分:0 
当然,如果k=100,我就会把
if(i!=k)   
   {
    temp=a[k];
    a[k]=a[i];
    a[i]=temp;
   }
改成if(k!=100)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}但是这样下来结果还是显示数组a损坏!
2014-08-12 19:16
ditg
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:16
帖 子:852
专家分:1937
注 册:2014-4-10
收藏
得分:0 
哦,那就在想知道结果的地方增加printf,然后根据值的变化判断究竟是哪一步或哪一个地方出问题,反正都在一个大循环里头操作嘛,呵呵

梦想拥有一台龙芯3A-4000
2014-08-12 19:39
You0
Rank: 2
等 级:论坛游民
帖 子:29
专家分:63
注 册:2014-8-2
收藏
得分:0 
不知道楼主什么意思,这个换做常数是为什么?这样不就错了吗?


#include<stdio.h>
int main()
{
int a[10],temp;
int i,j,k;
for(i=0;i<10;i++)
  scanf("%d",&a[i]); //这里是输入10个数
for(i=0;i<9;i++)
{
  k=i;             //疑惑1:可不可以将改成k=100;||不知道这里换成100有什么用
  for(j=i+1;j<10;j++)
   if(a[j]>a[k])      //因为j++,所以这里是挑出数组中最大的值。
    k=j;       //疑惑二:可不可以改为k=99;||还是不懂这里改成99什么意思,这里是把最大的
                //那个值对应的数组下表赋给k。
  if(i!=k)   
  {
   temp=a[k];    //这里是交换值,如果i=k反正最大都是第一个 就没有必要换。这里是把最大的还给数组的
   a[k]=a[i];    //    第一个
   a[i]=temp;
  }
}
for(i=0;i<10;i++)
  printf("降序排列为:%d\n",a[i]);
return 0;
}
2014-08-12 19:58
licai123
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-8-6
收藏
得分:0 
回复 5 楼 You0
/*将输入的10个数按降序排列*/

#include<stdio.h>
int main()
{
 int a[10],temp;
 int i,j,k;
 for(i=0;i<10;i++)
  scanf("%d",&a[i]);
 for(i=0;i<9;i++)
 {
  k=100;             //疑惑1:可不可以将改成k=100;
  for(j=i+1;j<10;j++)
   if(a[j]>a[k])
    k=99;       //疑惑二:可不可以改为k=99;

  if(k!=100)    //这个是如果未执行k=99后
  {
   temp=a[i];
   a[i]=a[j];
   a[j]=temp;
  }
 }
 for(i=0;i<10;i++)
  printf("降序排列为:%d\n",a[i]);
 return 0;
}

这个是按我原来的意思修改后的程序,但是行不通啊
2014-08-12 21:14
You0
Rank: 2
等 级:论坛游民
帖 子:29
专家分:63
注 册:2014-8-2
收藏
得分:0 
回复 6 楼 licai123
k=100  a[100]  不就超了吗
2014-08-13 14:01
快速回复:为什么不能将 k=i 和 k=j 换成两个 k=两个常数?
数据加载中...
 
   



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

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