
一道c语言的题目。请高手们帮帮忙
从1到33这些数中任选6个不相等的数,这6个数的和大于等于60且小于等于137,这6个数的个位数相加大于等于14且小于等于36,这6个数中相邻连续的各数不超过3个,这样的...
从1到33这些数中任选6个不相等的数,这6个数的和大于等于60且小于等于137,这6个数的个位数相加大于等于14且小于等于36,这6个数中相邻连续的各数不超过3个,这样的组合有多少种,并输出组合。
展开
展开全部
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<stdio.h>
typedef struct args {
int nums[6];
int count;
int continuous;
}Args;
void getNewNumber(Args *args) {
int i, j;
if (args->count == 5) {
int all = 0;
int _all = 0;
for(i = 0; i < 6; i++) {
all += args->nums[i];
_all += (args->nums[i] % 10);
}
if(all < 60 || all > 137 || _all < 35 || _all > 36)
return;
for (i = 0; i < 6; i++) {
printf("%d ", args->nums[i]);
}
printf("\n");
return;
}
i = (args->continuous == 2) ? args->nums[args->count] + 2 : args->nums[args->count] + 1;
if (i > 33)
return;
for (j = i; j <= 33; j++) {
Args n;
memcpy(&n, args, sizeof(n));
if (j == n.nums[n.count] + 1) {
n.continuous++;
n.count++;
n.nums[n.count] = j;
getNewNumber(&n);
} else {
n.count++;
n.nums[n.count] = j;
getNewNumber(&n);
}
}
}
void main()
{
int i = 1;
Args *root = (Args *) malloc (sizeof(Args));
memset(root, 0, sizeof(Args));
for (i = 1; i <= 33; i++) {
root->continuous = 0;
root->count = 0;
root->nums[0] = i;
getNewNumber(root);
}
}
#include<string.h>
#include<malloc.h>
#include<stdio.h>
typedef struct args {
int nums[6];
int count;
int continuous;
}Args;
void getNewNumber(Args *args) {
int i, j;
if (args->count == 5) {
int all = 0;
int _all = 0;
for(i = 0; i < 6; i++) {
all += args->nums[i];
_all += (args->nums[i] % 10);
}
if(all < 60 || all > 137 || _all < 35 || _all > 36)
return;
for (i = 0; i < 6; i++) {
printf("%d ", args->nums[i]);
}
printf("\n");
return;
}
i = (args->continuous == 2) ? args->nums[args->count] + 2 : args->nums[args->count] + 1;
if (i > 33)
return;
for (j = i; j <= 33; j++) {
Args n;
memcpy(&n, args, sizeof(n));
if (j == n.nums[n.count] + 1) {
n.continuous++;
n.count++;
n.nums[n.count] = j;
getNewNumber(&n);
} else {
n.count++;
n.nums[n.count] = j;
getNewNumber(&n);
}
}
}
void main()
{
int i = 1;
Args *root = (Args *) malloc (sizeof(Args));
memset(root, 0, sizeof(Args));
for (i = 1; i <= 33; i++) {
root->continuous = 0;
root->count = 0;
root->nums[0] = i;
getNewNumber(root);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询