| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 697 人关注过本帖
标题:各位大侠,如何把一个四位数的整型变量放入一个4位数组,并用bubble sort从 ...
只看楼主 加入收藏
winglesswu
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2013-1-28
结帖率:71.88%
收藏
 问题点数:0 回复次数:9 
各位大侠,如何把一个四位数的整型变量放入一个4位数组,并用bubble sort从大到小和从小到大变成2个数字?
比如一个数字是3816,如何变成8631和1368,下面是我的idea:
include<stdio.h>
main ()
{
int a, x, y, z, a1, a2, a3, a4, arr[4];

arr[0] = a / 1000; a1=  arr[0];

x = a –( arr[0] * 1000);  arr[1] = x/100;   a2=arr[1];

y=x-(a2*100); arr[2]=y/10; a3=arr[2];

z=y-a3*10; a4=z;
}
不知道上面写的对不对,
那么后面怎么排列出两组分别是从高到低,从低到高的两个数呢?

               
搜索更多相关主题的帖子: arr 如何 
2013-03-01 11:24
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
没看懂你的思路,能详细讲讲么?


[fly]存在即是合理[/fly]
2013-03-01 11:53
小xiong
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:388
专家分:1722
注 册:2013-2-8
收藏
得分:0 
学习,,
2013-03-01 13:08
a76962934
Rank: 2
等 级:论坛游民
帖 子:39
专家分:53
注 册:2012-5-30
收藏
得分:0 
include<stdio.h>
main ()
{
int a,i,j ,arr[4];
for(i=0;i<4;i++)
{
   arr[i]=a%10;
   a=a/10;
}
for(i=0;i<3;i++)
   for(j=0;j<3-i;j++)
     {
         if(arr[j]>arr[j+1])
             {
               temp=arr[j];
               arr[j]=arr[j+1];
               arr[j+1]=temp;
             }
     }
printf("%d%d%d%d",arr[0],arr[1],arr[2],arr[3]);
}
for(i=0;i<3;i++)
   for(j=0;j<3-i;j++)
     {
         if(arr[j]<arr[j+1])
             {
               temp=arr[j];
               arr[j]=arr[j+1];
               arr[j+1]=temp;
             }
     }
printf("%d%d%d%d",arr[0],arr[1],arr[2],arr[3]);
}
     我没编译   你自己试试看

2013-03-01 13:44
a76962934
Rank: 2
等 级:论坛游民
帖 子:39
专家分:53
注 册:2012-5-30
收藏
得分:0 

#include<stdio.h>
main ()
{
int a,i,j,temp,arr[4];
printf("请输入:\n");
scanf("%d",&a);
for(i=0;i<4;i++)
{
   arr[i]=a%10;
   a=a/10;
}
for(i=0;i<3;i++)
   for(j=0;j<3-i;j++)
     {
         if(arr[j]>arr[j+1])
             {
               temp=arr[j];
               arr[j]=arr[j+1];
               arr[j+1]=temp;
             }
     }
printf("%d%d%d%d\t",arr[0],arr[1],arr[2],arr[3]);

for(i=0;i<3;i++)
   for(j=0;j<3-i;j++)
     {
         if(arr[j]<arr[j+1])
             {
               temp=arr[j];
               arr[j]=arr[j+1];
               arr[j+1]=temp;
             }
     }
printf("%d%d%d%d",arr[0],arr[1],arr[2],arr[3]);
}
刚发的那个有点错误   这个我找了台试了试  可行
2013-03-01 16:27
shmilyflf
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:356
专家分:1008
注 册:2012-12-9
收藏
得分:0 
回复 5楼 a76962934
5楼的程序还是有问题吧!
for(i=0;i<4;i++)
 {
    arr[i]=a%10;//这里得到的是输入四位数的反过来,即arr[0]保存的是个位数,arr[3]保存的是千位数
    a=a/10;
 }
 for(i=0;i<3;i++)//明明是长度为4的数组,你怎么只能循环3次?
    for(j=0;j<3-i;j++)//应该是for(i=0;i<4;i++)...才会合适吧
      {
          if(arr[j]>arr[j+1])
              {
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
              }
      }

下面的也是这个问题。
2013-03-01 20:20
a76962934
Rank: 2
等 级:论坛游民
帖 子:39
专家分:53
注 册:2012-5-30
收藏
得分:0 

for(i=0;i<4;i++)
{
    arr[i]=a%10;//这里得到的是输入四位数的反过来,即arr[0]保存的是个位数,arr[3]保存的是千位数
    a=a/10;
}
这个无所谓的啊  根据题设我只需要知道每个数是多少而已  然后排序输出就可以了
 for(i=0;i<3;i++)//这是冒泡排序法啊  只需要循环3次就够了   
    for(j=0;j<3-i;j++)//如果这里改成j<4只会多做无用功   
   你可以去看看冒泡排序法
2013-03-01 21:18
shmilyflf
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:356
专家分:1008
注 册:2012-12-9
收藏
得分:0 
回复 7楼 a76962934
班门弄斧了,确实是,比较3次会节省时间。学习……
2013-03-02 11:47
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
#include <stdio.h>

void sort(int a[], int len)
{
    int temp;
    for (int i = 0; i < len - 1; ++i)
    for (int j = 0; j < len - 1 - i; ++j)
        if (a[j] < a[j+1])
        temp = a[j], a[j] = a[j+1], a[j+1] = temp;
}

void test1()
{
    int a[4];
    scanf("%1d%1d%1d%1d", &a[0], &a[1], &a[2], &a[3]);
    sort(a, 4);
    printf("%d%d%d%d\n", a[0], a[1], a[2], a[3]);
    printf("%d%d%d%d\n\n", a[3], a[2], a[1], a[0]);
}

void test2()
{
    int i, temp, a[10] = {0};

    for (i = 0; i < 4; ++i)
        scanf("%1d", &temp), ++a[temp];

    for (i = 0; i < 10; ++i)
    for (temp = a[i]; temp--;)
        printf("%d", i);
    puts("");
    
    for (i = 9; i >= 0; --i)
    for (temp = a[i]; temp--;)
        printf("%d", i);
    puts("\n");
}

int main()
{
    test1();
    test2();
    return 0;
}


[fly]存在即是合理[/fly]
2013-03-02 13:19
winglesswu
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2013-1-28
收藏
得分:0 
以下是引用a76962934在2013-3-1 16:27:41的发言:


#include
main ()
{
int a,i,j,temp,arr[4];
printf("请输入:\n");
scanf("%d",&a);
for(i=0;i<4;i++)
{
   arr=a%10;
   a=a/10;
}
for(i=0;i<3;i++)
   for(j=0;j<3-i;j++)
     {
         if(arr[j]>arr[j+1])
             {
               temp=arr[j];
               arr[j]=arr[j+1];
               arr[j+1]=temp;
             }
     }
printf("%d%d%d%d\t",arr[0],arr[1],arr[2],arr[3]);

for(i=0;i<3;i++)
   for(j=0;j<3-i;j++)
     {
         if(arr[j]

谢谢,朋友,得出正确的结果。但是不明白这个排序方法的原理及for语句的应用。
2013-03-03 01:08
快速回复:各位大侠,如何把一个四位数的整型变量放入一个4位数组,并用bubble s ...
数据加载中...
 
   



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

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