程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c/c++-求求求求改進程序,C/C++藍橋杯FJ字符串

c/c++-求求求求改進程序,C/C++藍橋杯FJ字符串

編輯:編程綜合問答
求求求求改進程序,C/C++藍橋杯FJ字符串

問題描述
  FJ在沙盤上寫了這樣一些字符串:
  A1 = “A”
  A2 = “ABA”
  A3 = “ABACABA”
  A4 = “ABACABADABACABA”
  … …
  你能找出其中的規律並寫所有的數列AN嗎?
輸入格式
  僅有一個數:N ≤ 26。
輸出格式
  請輸出相應的字符串AN,以一個換行符結束。輸出中不得含有多余的空格或換行、回車符。
樣例輸入
3
樣例輸出
ABACABA
#include"iostream"
using namespace std;
long N=1500000;
long n; //字符串長度
int k,record; //k為題目第N行,rerocd記錄
void recursion(char ch[],int i) //遞歸
{
if(k==record)
return;
record++;
long j,m=n;

ch[n++]=65+i; //將下一個字母存進來
ch[n]='\n';

for(j=0;j ch[n++]=ch[j];
ch[n]='\n';
recursion(ch,i+1);
}
int main()
{
char ch[N];
long i=0;
cin>>k;
recursion(ch,0);
while(ch[i]!='\n')
cout<<ch[i++];
cout<<endl;
cout<<n<<endl;
return 0;
}


圖片說明
這張圖片是我輸入k=20情況,這時候字符串長度n已經100萬多長了。。然而我想增加宏定義N 長度 。。增加到200萬的時候,程序就奔潰了。。但是題目要求k<=26.
請問有什麼辦法改進。

最佳回答:


如樓上用遞歸是可以的 不過使用遞歸的話會調用很多次遞歸函數 可以使用循環,這可能會需要很大的空間,從1開始計算要輸出的字符串,並依次推出下個數字要輸出的字符串直到到達n. 如圖給出了兩種方法的代碼 注釋掉了遞歸函數的調用,兩種方法時效性差不多,親測n為20都需要55秒左右,至於空間消耗 遞歸每次調用都會產生額外的消耗 至於哪個消耗更大 樓主自己查算一下看 不是特別清楚圖片

MARSHALBEN
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved