| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2406 人关注过本帖
标题:组数游戏
只看楼主 加入收藏
xutao123
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-6-18
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
组数游戏
七、组数游戏
问题分析
(1)输入正整数的个数n,输出n个数连接成的最大的多位数。找出n个数中最大数字的位数,然后将所有的数字通过后面补零的方式扩展成为最大位数。把变换后的n位数从大到小排序,然后把添加上的零去掉,按顺序输出的序列即为所求的最大数字。
(2)数据结构采用结构体,由于正整数的位数不确定,可能非常大,所以数据类型采用字符数组。
Struct
{
char data[20];     //数据
  char ext_data[20];  //扩展数据
  //扩展数据
}Elem[N];    //结构体数组
N可以在宏定义中定义:#define N 20
(3)算法流程
输入正整数个数n;
Max=0;   //Max存储最大位数
//输入正整数并计算最大位数
For (i=0;i<n;++i)
{
&nbsp;&nbsp;输入Elem[i].data;
&nbsp;&nbsp;Strcpy(Elem[i].ext_data,Elem[i].data);
&nbsp;&nbsp;Tmp=strlen(Elem[i].data);&nbsp;&nbsp;&nbsp;//计算输入数字的位数
&nbsp;&nbsp;If(Tmp>Max)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Max=Tmp;
}
//计算扩展数字
For (i=0;i<n;++i)
{
&nbsp;&nbsp;tmp=strlen(Elem[i].data);&nbsp;&nbsp;&nbsp;//计算输入数字的位数
&nbsp;&nbsp;m=Max-tmp;&nbsp;&nbsp;&nbsp;&nbsp;//m为需要补0的个数
&nbsp;&nbsp;定义一个m个’0’的字符串tmp_str;
&nbsp;&nbsp;Strcat(Elem[i].ext_data,tmp_str);
}
&nbsp;&nbsp;&nbsp;//排序
任选一中排序算法(冒泡、插入、选择等)对数字结构体数组按照ext_data从大到小排序。
&nbsp;&nbsp;&nbsp;//输出
&nbsp;&nbsp;&nbsp;按序输出结构体数组中data数据。
搜索更多相关主题的帖子: 输入 个数 位数 data Elem 
2018-06-18 20:47
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
收藏
得分:10 
本来想看看你怎麽写的,然后发现你的不是代码,然后自己竟然认真地读题了,然后没有然后了,代码。。。。
程序代码:

#include <stdio.h>
#include <stdlib.h>

#define CMAXLEN 1024

typedef struct _data {
    char *x;
    int xlen;
    struct _data *next;
} CDATA;

int CAD(CDATA **head);
int T1(CDATA *head);
int T2(CDATA *head);
int T3(CDATA *head);
void PT(CDATA *head);

int main(int argc, char **argv)
{
    CDATA *head = NULL;
    CAD(&head);
    T1(head);
    printf("\n");
    T2(head);
    printf("\n");
    T3(head);
    return 0;
}

int CAD(CDATA **head){
    CDATA *now = NULL , *DP;
    int n , i , j , slen;
    char *P , a[CMAXLEN] = {0};
    scanf("%d",&n);
    for(i = 0 ; i < n ; i++){
        scanf("%s%n",a,&slen);
        P = (char *)malloc(sizeof(char)*slen);
        for(j = 0 ; j < slen ; j++){
            P[j] = a[j];
            a[j] = 0;
        }
        DP = (CDATA *)malloc(sizeof(CDATA));
        DP->x = P;
        DP->xlen = slen;
        DP->next = NULL;
        if(*head == NULL){
            *head = now = DP;
        }else{
            now->next = DP;
            now = now->next;
        }
    }
    return 1;
}

int T1(CDATA *head){
    int num[10] = {0};
    int i ;
    while(head){
        for(i = 0 ; i < head->xlen - 1 ; i++){
            num[(int)head->x[i]-'0']++;
        }
        head = head->next;
    }
    for(i = 9 ; i >= 0 ; i--){
        while(num[i]--){
            printf("%d",i);
        }
    }
    printf("\n");
    return 1;
}

int T2(CDATA *head){
    CDATA *now = head;
    int i , max = 0;
    while(head){
        if(head->xlen > max){
            max = head->xlen;
        }
        head = head->next;
    }
    while(now){
        for(i = 0 ; i < max - now->xlen ; i++){
            printf("%c",'0');
        }
        printf("%s\n",now->x);
        now = now->next;
    }
    return 1;
}

int T3(CDATA *head){
    int num[10] = {0};
    int i ;
    while(head){
        for(i = 0 ; i < head->xlen - 1 ; i++){
            num[(int)head->x[i]-'0']++;
        }
        head = head->next;
    }
    for(i = 9 ; i > 0 ; i--){
        while(num[i]--){
            printf("%d",i);
        }
    }
    return 1;
}

void PT(CDATA *head){
    while(head){
        printf("%s %p\n",head->x,head->next);
        head = head->next;
    }
}


2018-06-19 12:26
三三ff
Rank: 2
来 自:china
等 级:论坛游民
帖 子:2
专家分:10
注 册:2018-6-20
收藏
得分:10 
回复 2楼 kin3z
你的好像把零补到前面了
2018-06-20 18:42
快速回复:组数游戏
数据加载中...
 
   



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

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