`【問題描述】
小明想知道,滿足以下條件的正整數序列的數量:
1. 第一項為 n;
2. 第二項不超過 n;
3. 從第三項開始,每一項小于前兩項的差的絕對值。
請計算,對于給定的 n,有多少種滿足條件的序列。
【輸入格式】
輸入一行包含一個整數 n。
【輸出格式】
輸出一個整數,表示答案。答案可能很大,請輸出答案除以10000的余數。
【樣例輸入】
4
【樣例輸出】
7
【樣例說明】
以下是滿足條件的序列:
4 1
4 1 1
4 1 2
4 2
4 2 1
4 3
4 4
【評測用例規模與約定】
對于 20% 的評測用例,1 <= n <= 5;
對于 50% 的評測用例,1 <= n <= 10;
對于 80% 的評測用例,1 <= n <= 100;
對于所有評測用例,1 <= n <= 1000。
對于這道題 首先我寫了這樣一個程式
#include<math.h>
#include<iostream>
using namespace std;
int sum1=0,sum2=0,i;
int a[1005];
int x=1;
int f(int n)
{
int d=abs(a[n]-a[n-1]);
if(d==1||d==0) return sum2;
for(i=1;i<d;i++)
{
a[n+1]=i;
sum2=sum2+1;
f(n+1);
}
return sum2;
}
int main(void)
{
cin>>a[0];
while(x<=a[0])
{
a[1]=x;
sum1=sum1+1+f(1);
sum2=0;
x++;
}
cout<<sum1;
}
運行后發現是不對的,我覺得可能是因為里面i的覆寫,然后參考了網上的程式,把for回圈中i的賦值改成了register int i=1
即 for(register int i=1;i<d;i++) ....... 居然就對了,查了一下register int,好像沒怎么特殊,為什么就可以產生這么決定性的影響,求大佬解答
uj5u.com熱心網友回復:
你把register去掉也一樣。問題是for回圈里的i不能用全域變數i,因為遞回呼叫會改變i的值。uj5u.com熱心網友回復:
不一樣啊 運行結果完全不一樣uj5u.com熱心網友回復:
for(register int i=1;i<d;i++) 用的就不是全域變數,而是區域變數,不會影響全域變數 i 的值
for(int i=1;i<d;i++) 也一樣
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/85999.html
標籤:C++ 語言
上一篇:新手求教一下
