1. 题目
2. 代码
- 先用非常非常简单的(同样也不符合题意的)代码写了一遍。
#include <iostream>
using namespace std;
int f[10000];
int main(){
int max, k;
cin >> max >> k;
for(int i=0; i<k-1; i++){
f[i] = 0;
}
f[k-1] = 1;
int i = k;
do{
for(int t=1; t<=k; t++){
f[i] += f[i-t];
}
}while(f[i++] <= max);
int n = i - 1;
for(int i = n-k; i<n; i++){
cout << f[i] << " ";
}
return 0;
}
- 按照要求用循环队列写一遍
#include <iostream>
using namespace std;
typedef struct queue{
int *base;
int front, rear;
int n;
}Queue;
void init(Queue *q, int k){
q->front = 0;
q->rear = 0;
q->n = k+1;
q->base = (int*) malloc(sizeof(int) * q->n);
}
void push(Queue *q, int t){
if((q->front) == (q->rear + 1) % q->n){
exit(-1);
}
else{
q->base[q->rear] = t;
q->rear = (q->rear + 1) % q->n;
}
}
int sumq(Queue *q){
int t = 0;
for(int i=q->front; i!=q->rear; i=(i+1)%(q->n)){
t += q->base[i];
}
return t;
}
void pop(Queue *q){
if(q->front == q->rear){
exit(-1);
}
q->front = (q->front + 1) % (q->n);
}
void output(Queue *q){
for(int i=q->front; i!=q->rear; i=(i+1)%(q->n)){
cout << q->base[i] << " ";
}
}
int main(){
Queue *q = (Queue*) malloc(sizeof(Queue));
int max, k;
cin >> max >> k;
init(q, k);
for(int i=0; i<k-1; i++){
push(q, 0);
}
push(q, 1);
int sum;
while(true){
sum = sumq(q);
if(sum > max){
break;
}
pop(q);
push(q,sum);
}
output(q);
return 0;
}