其实只要 看n-1,n-2,n-4,n-7,n-15就行了
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
#define ll long long
#define MAXN 100
int d[5] = { 15,7,4,2,1 };
int n;
int main()
{
int cnt = 0;
while (scanf("%d", &n) != EOF)
{
int flag = 0;
for (int i = 0; i < 5; i++)
{
if (n - d[i] >= 1)
{
if (flag == 1)
{
printf(" ");
}
printf("%d", n - d[i]);
flag = 1;
}
}
printf("\n");
}
return 0;
}
但是这里复习一下链表的操作
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
#define ll long long
#define MAXN 100
typedef struct node
{
int list_num;
node* next;
}node,*ptrnode;
typedef struct solve
{
ptrnode p;
}solve;
solve a[100000 + 1];
int delta[5] = { 1,2,4,7,15 };
int n;
void f()
{
for (int i = 1; i <= MAXN; i++)
{
for (int j = 0; j < 5; j++)
{
int t = i + delta[j];
if (j == 0)
{
if (t > MAXN)
{
return;
}
}
if (t <= MAXN)
{
ptrnode temp = (ptrnode)malloc(1 * sizeof(node));
temp->list_num = i;
temp->next = NULL;
if (a[t].p== NULL)
{
a[t].p = (ptrnode)malloc(1 * sizeof(ptrnode));
a[t].p->list_num = 0;
a[t].p->next = NULL;
}
temp->next = a[t].p->next;
a[t].p->next = temp;
}
}
}
}
int main()
{
f();
ptrnode read;
for (int i = 2; i <= MAXN; i++)
{
printf("第%d天:",i);
read = a[i].p;
while (read->next != NULL)
{
read = read->next;
printf("%d ", read->list_num);
}
printf("\n");
}
return 0;
}