| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1187 人关注过本帖
标题:发个悬赏贴可否 编写一个自定义函数 形参是一个int 返回值是形参的各个数 ...
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:100 回复次数:15 
发个悬赏贴可否 编写一个自定义函数 形参是一个int 返回值是形参的各个数字所组成的最大值,比如输入123 返回321
以下是我写的  感觉有些麻烦  有简单的方案吗
程序代码:
#include <stdio.h>

int _max(int n)
{
    int base[10]={0,0,0,0,0,0,0,0,0,0};
    int index=0;
    //以下对源数字进行分解
    while(n>0)
    {
        base[index]=n%10;
        n/=10;
        index++;
    }
    //以下对分解数字进行排序
    int i,j,tmp;
    for(i=0;i<index;i++)
    {
        for(j=i;j<index;j++)
        {
            if(base[j]>base[i])
            {
                tmp=base[j];
                base[j]=base[i];
                base[i]=tmp;
            }
        }
    }
    //以下将分解数字进行重组
    i=0;
    tmp=0;
    while(i<index)
    {
        tmp=tmp*10+base[i];
        i++;
    }
    return tmp;
}

int main()
{
   printf("%d\n",_max(39071298));
   return 0;
}

搜索更多相关主题的帖子: 最大值 
2014-01-03 09:19
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:0 
不晓得。要是我写的话、大概也就是这种想法。

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2014-01-03 09:35
baiqtd123456
Rank: 2
等 级:论坛游民
帖 子:8
专家分:78
注 册:2013-11-22
收藏
得分:50 
#include <stdio.h>

char num_chip[10] = {0,};

char push_chip(char n)
{
  int i;

  for(i = 0; i < 10; i++)
  {
    if(n == i)
    {
      num_chip[i]++;
    }
  }
}

int pop_chip()
{
  int i;
  int ret_val = 0;

  for(i = 9; i >= 0; i--)
  {
    while(num_chip[i]-- != 0)
    {
       ret_val = ret_val*10+i;
    }
  }

  return ret_val;
}

int _max(int num)
{
  for(; num; push_chip(num%10), num=num/10);

  return pop_chip();
}


int main()
{
  int num1 = 23568;
  int num2 = 0;

  num2 = _max(num1);

  printf("%d\n", num2);

  return 0;
}

[ 本帖最后由 baiqtd123456 于 2014-1-3 10:00 编辑 ]
2014-01-03 09:57
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:50 
来蹭万哥的分咯
程序代码:
#include <stdio.h>

int _max(int n)
{
    int a[10] = {0}, r = 0, i;
    for(; n; n /= 10) a[n % 10]++;
    for(i = 9; i >= 0; i--)
        while(a[i]--) r = r * 10 + i;
    return r;
}

int main()
{
    printf("%d\n", _max(39071298));
    return 0;
}

重剑无锋,大巧不工
2014-01-03 09:58
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用beyondyf在2014-1-3 09:58:23的发言:

来蹭万哥的分咯
#include <stdio.h>

int _max(int n)
{
    int a[10] = {0}, r = 0, i;
    for(; n; n /= 10) a[n % 10]++;
    for(i = 9; i >= 0; i--)
        while(a--) r = r * 10 + i;
    return r;
}

int main()
{
    printf("%d\n", _max(39071298));
    return 0;
}

好像有些看懂了  省略了一道排序的步骤

DO IT YOURSELF !
2014-01-03 10:01
baiqtd123456
Rank: 2
等 级:论坛游民
帖 子:8
专家分:78
注 册:2013-11-22
收藏
得分:0 
四楼和我的思路差不多,不过要更简洁,哈哈!
2014-01-03 10:02
baiqtd123456
Rank: 2
等 级:论坛游民
帖 子:8
专家分:78
注 册:2013-11-22
收藏
得分:0 
中心思想就是用数轴对分片的数字计数,然后把数轴上的数按顺乘10后累加

[ 本帖最后由 baiqtd123456 于 2014-1-3 10:12 编辑 ]
2014-01-03 10:05
夏天天蓝
Rank: 2
等 级:论坛游民
帖 子:39
专家分:86
注 册:2013-12-30
收藏
得分:0 
for(; n; n /= 10) a[n % 10]++;
    for(i = 9; i >= 0; i--)
求解释这两句,没看明白,谢谢!!!
2014-01-03 11:13
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 8楼 夏天天蓝
7楼已经说了

总有那身价贱的人给作业贴回复完整的代码
2014-01-03 11:34
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:0 
大神就是大神。。。。

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2014-01-03 13:24
快速回复:发个悬赏贴可否 编写一个自定义函数 形参是一个int 返回值是形参的 ...
数据加载中...
 
   



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

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