1,2,3三个数字组合成三位数,每位数字不同

 

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

#define ELEMENT_MAX     8

struct num_set_t{
    int element_count;
    int elements[ELEMENT_MAX];
};

typedef struct num_set_t Num_Set;

void spilt_set(Num_Set *num_set, int pos, int *header, Num_Set *rest_set) {
    int i, j, k;

    (*header) = num_set->elements[pos];

    i = 0;
    for (j = 0; j < pos; j++) {
        rest_set->elements[i] = num_set->elements[j];
        i++;
    } //for

    for (k = (pos + 1); k < num_set->element_count; k++) {
        rest_set->elements[i] = num_set->elements[k];
        i++;
    } //for

    rest_set->element_count = i;
}

void display_set(Num_Set *num_set) {
    int i = 0;

    fprintf(stderr, "( ");
    for (i = 0; i < num_set->element_count; i++) {
        fprintf(stderr, "%d ", num_set->elements[i]);
    } //for
    fprintf(stderr, ")\n");
}

void make_num_set(Num_Set *num_set, Num_Set *result_set) {
    int i, j, k;
    int header = 0;
    int base = 10;
    Num_Set rest;
    Num_Set tmp_result;

    //display_set(num_set);
    if (num_set->element_count == 1) {
        result_set->elements[0] = num_set->elements[0];
        result_set->element_count = 1;
    }
    else {
        // work out the base
        for (i = 0; i < (num_set->element_count - 2); i++) {
            base *= 10;
        } //for

        j = 0;
        for (i = 0; i < num_set->element_count; i++) {
            memset(&rest, 0, sizeof(rest));
            spilt_set(num_set, i, &header, &rest);
            //display_set(&rest);
            memset(&tmp_result, 0, sizeof(tmp_result));
            make_num_set(&rest, &tmp_result);

            //compute the result numbers.
            for (k = 0; k < tmp_result.element_count; k++) {
                result_set->elements[j] = header * base + tmp_result.elements[k];
                //fprintf(stderr, "%d = %d * %d + %d\n", result_set->elements[j], header, base, tmp_result.elements[k]);
                j++;
            } //for
            result_set->element_count = j;
        } //for
    }
}

int main()
{
    int i;
    Num_Set num_set;
    Num_Set result_set;

    num_set.element_count = 3;
    for (i = num_set.element_count; i > 0; i--) {
        num_set.elements[i - 1] = i;
    } //for

    make_num_set(&num_set, &result_set);
    for (i = 0; i < result_set.element_count; i++) {
        fprintf(stderr, "%d\n", result_set.elements[i]);
    } //for

    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值