連結串列-3n+1數列問題
Problem Description
有一天小標遇到了經典的3n+1數鏈問題,他想知道3n+1數鏈的前k個數是多少。
下面小標來給你介紹一下3n+1數鏈是什麼,
給定一個數n,如果n為偶數,那麼下一個數n1 = n / 2;否則n1 = 3 * n + 1;
如果n1為偶數,那麼下一個數n2 = n1 / 2;否則n2 = 3 * n1 + 1;
如果n2為偶數,那麼下一個數n3 = n2 / 2;否則n3 = 3 * n2 + 1;
.....
小標最近剛剛學習了連結串列,他想把這兩個知識結合一下,所以,他想按照下面的規定去做。
①起始n為10,k為5,連結串列為空
②判斷n為偶數,他會往連結串列頭部加一個5(即n/2),此時連結串列中序列為5,n變為5 -> NULL
③接下來n==5,判斷n為奇數,他會往連結串列尾部加一個16(即3*n+1),此時連結串列中序列為5 -> 16 -> NULL
④接下來n==16,判斷n為偶數,他會往連結串列頭部加一個8(即n/2),此時連結串列中序列為8 -> 5 -> 16 -> NULL
⑤接下來n==8,判斷n為偶數,他會往連結串列頭部加一個4(即n/2),此時連結串列中序列為4 - > 8 - > 5 -> 16 -> NULL
⑥接下來n==4,判斷n為偶數,他會往連結串列頭部加一個2(即n/2),此時連結串列中序列為2 - > 4 - > 8 - > 5 -> 16 -> NULL
到此時,小標得到了前k個數,那麼輸出這個序列。
Ps: 為了變得更容易理解,簡單來說就是n為偶數,加在連結串列頭部,n為奇數,加在連結串列尾部
Input
多組輸入。
對於每組資料,每行兩個整數1 <= n , k <= 1000,含義如上
Output
輸出連結串列序列
Sample Input
10 5
Sample Output
2 4 8 5 16
Hint
Source
2015級《程式設計基礎II》計科軟體通訊期末上機考試2
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef struct Node{
int data;
struct Node *next;
}node;
void create(node * &head,int n,int m){
node *t,*p,*q;
int cur = n;
head = new Node;
head->next = NULL;
q = head;
q->next = NULL;
for(int i = 0; i < m ;i++){
p = new Node;
if(cur % 2 != 0){
cur=3 * cur + 1;
p->data = cur;
for(t = head;t->next!= NULL;t = t->next);
t->next = p;
p->next = NULL;
}else{
cur=cur/2;
p->data = cur;
t = head;
q = t->next;
t->next=p;
p->next=q;
}
}
}
void print(node * &head){
node *tail;
tail = head->next;
while(tail){
if(tail->next == NULL){
printf("%d\n",tail->data);
}else{
printf("%d ",tail->data);
}
tail = tail->next;
}
}
int main(){
node *head;
int n,m;
while(scanf("%d %d",&n,&m)!=EOF)
{
create(head,n,m);
print(head);
}
return 0;
}
注意多組輸入和頭尾插法
相關文章
- 單連結串列建立連結串列出現問題
- 連結串列專題——面試中常見的連結串列問題面試
- 連結串列反轉問題
- 反轉連結串列系列問題
- 單連結串列的排序問題排序
- 【連結串列問題】刪除單連結串列的中間節點
- 尋找連結串列相交結點問題
- 陣列和連結串列陣列
- 陣列與連結串列陣列
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- 約瑟夫環(Josephus)問題--報數遊戲(連結串列)遊戲
- 【連結串列問題】打卡3:刪除單連結串列的中間節點
- LeetCode 第 86 號問題:分割連結串列LeetCode
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- 連結串列專題
- 【連結串列問題】打卡2:刪除單連結串列的第 K個節點
- 佇列_單向連結串列佇列
- 連結串列&鏈棧&佇列佇列
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 【連結串列問題】打卡8:複製含有隨機指標節點的連結串列隨機指標
- 單連結串列有環的幾個問題
- LeetCode連結串列專題LeetCode
- 【圖解連結串列類面試題】移除連結串列元素圖解面試題
- 【圖解連結串列類面試題】環形連結串列圖解面試題
- 可變陣列——連結串列前言陣列
- 陣列模擬單連結串列陣列
- 線性結構 陣列與連結串列陣列
- 連結串列(LinkedList)解題總結
- 環形連結串列_相交連結串列_多數元素(java語言)Java
- 【連結串列問題】打卡10:將搜尋二叉樹轉換成雙向連結串列二叉樹
- 連結串列-迴圈連結串列
- 連結串列-雙向連結串列
- 連結串列 - 單向連結串列
- 聊聊陣列與連結串列,棧與佇列陣列佇列
- day1-陣列和連結串列陣列
- 【精挑細講】這 10 道連結串列相關演算法題,將助你告別連結串列問題(上)演算法
- 2024/12/1 【連結串列】 LeetCode 面試題 02.07. 連結串列相交LeetCode面試題
- 連結串列4: 迴圈連結串列