本文目錄一覽:
- 1、新手如何自學編程
- 2、C語言為什麼程序單步調試正確,一整體運行就錯誤
- 3、輸入若干有序數放在數組中。然後輸入一個數,插入到此有序數列中,插入後,數組中的數仍然有序。
- 4、C++編程:約瑟夫環問題。
- 5、python類約瑟夫環原創問題求解 求大神
- 6、python約瑟夫環怎麼判
新手如何自學編程
要熟悉編程範式,尤其是面向過程及面向對象這兩種;要廣泛閱讀,多用編譯器及IDE(網上有許多免費的)練習編程。
選擇一種編程語言。初學者一定要從主流語言開始學習,比如中級語言C和C++。這兩種語言是任何一名合格、專業的程序員都必須掌握的,因為它們稱得上是軟體開發界的主流。
但是最好不要從高級語言開始學,如Java,因為這些語言對於初學者來說難度未免太高(高級語言可以以後再學,但是C語言和C++應該作為你的基礎)。
然而對於完完全全的門外漢的來說,可能C和C++都有點困難,那麼你也可以從Python開始學,這種語言被大家廣泛認為是適合初學者的。
C語言為什麼程序單步調試正確,一整體運行就錯誤
malloc有問題。
line*head=(line*)malloc(sizeof(line));//
sizeof 是line不是line*。
下面的
line*body=(line*)malloc(sizeof(line));
同樣處理。
count函數沒細看。 不確定是否有問題。
輸入若干有序數放在數組中。然後輸入一個數,插入到此有序數列中,插入後,數組中的數仍然有序。
定義數組的時候,增加一個單元即可
#include stdio.h
#define M 6
int wnn1(int *,int,int);
void wnn2(int *,int);
void main()
{int x,n,t,s[M+1]={10,15,18,24,29,35};
printf(“input x:\n”);
scanf(“%d”,x);
n=M;
t=wnn1(s,x,n);
wnn2(s,t);
}
int wnn1(int *a,int x,int n)
{int i,j=0;
while(jna[j]x)j++;
for(i=n-1;i=j;i–)a[i+1]=a[i];
a[j]=x;
n++;
return n;
}
void wnn2(int *a,int n)
{int i;
for(i=0;in;i++)printf(“%4d”,a[i]);
printf(“\n”);
}
C++編程:約瑟夫環問題。
/*
【基本要求】
基本的約瑟夫的描述:
古代某法官要判決N個犯人的死刑,他有一條荒唐的法律,將犯人站成一個圓圈,
從第S個人開始數起,每數到第D個犯人,就拉出來處決,然後再數D個,數到的人再處決,
直到剩下的最後一個可赦免。
發展的約瑟夫的描述:
古代某法官要判決N個犯人的死刑,
但這N個人每人持有一個密碼,他有一條荒唐的法律,將犯人站成一個圓圈,
法官先給出一個密碼M,從第S個人開始數起,每數到第M個犯人,就拉出來處決,
再根據這個人所持有的密碼F,然後再數F個,數到的人再處決,
以此類推直到剩下的最後一個可赦免。
【測試數據】
數據請自己添加。
*/
#include iostream
using namespace std;
// 表示一個犯人的結構體
struct Prisoner
{
// 編號
int id;
// 密碼
int pass;
// 用於鏈表的指針
struct Prisoner * pre;
struct Prisoner * next;
};
class JosephCircle
{
public:
// 基本的約瑟夫構造函數
JosephCircle(int N,int S,int D);
// 發展的約瑟夫構造函數
JosephCircle(int N,int S,int M,int password[]);
// 輸出約瑟夫環
void print();
// 開始處決犯人
void start();
private:
// 約瑟夫環的頭指針
struct Prisoner * head;
// 第一個被處決的犯人的節點指針
struct Prisoner * firstPunishedPrision;
};
JosephCircle::JosephCircle(int N,int S,int D)
{
struct Prisoner * p , *pr;
// 約瑟夫環的頭指針初始化為空
this-head = NULL;
// 構造一個由 N 個犯人組成的約瑟夫環
for(int i=1;i=N;i++)
{
// 當前添加的犯人是第一個犯人,要特殊處理一下
if(this-head == NULL)
{
// 新增一個犯人
p = new struct Prisoner();
// 犯人編號
p – id = i;
// 犯人密碼
p – pass = D;
// 緊挨著的下一個犯人(因為是環狀的,每個人都會有緊挨著的其他犯人)
p – pre = p;
p – next = p;
// 約瑟夫環的頭指針
this-head = pr = p;
}
else
{
p = new struct Prisoner();
p – id = i;
p – pass = D;
p – pre = pr;
p – next = pr-next;
pr – next – pre = p;
pr – next = p;
pr = p;
}
}
// 尋找約瑟夫環裡面第一個被處決的犯人的【節點指針】
firstPunishedPrision = head;
for(int i=2;i=(S+D-1);i++)
{
this-firstPunishedPrision = this-firstPunishedPrision – next;
}
}
JosephCircle::JosephCircle(int N,int S,int M,int password[])
{
struct Prisoner * p , *pr;
// 約瑟夫環的頭指針初始化為空
this-head = NULL;
// 構造一個由 N 個犯人組成的約瑟夫環
for(int i=1;i=N;i++)
{
// 當前添加的犯人是第一個犯人,要特殊處理一下
if(this-head == NULL)
{
// 新增一個犯人
p = new struct Prisoner();
// 犯人編號
p – id = i;
// 犯人密碼
p – pass = password[i-1];
// 緊挨著的下一個犯人(因為是環狀的,每個人都會有緊挨著的其他犯人)
p – pre = p;
p – next = p;
// 約瑟夫環的頭指針
this-head = pr = p;
}
else
{
p = new struct Prisoner();
p – id = i;
p – pass = password[i-1];
p – pre = pr;
p – next = pr-next;
pr – next – pre = p;
pr – next = p;
pr = p;
}
}
// 尋找約瑟夫環裡面第一個被處決的犯人的【節點指針】
firstPunishedPrision = head;
for(int i=2;i=(S+M-1);i++)
{
this-firstPunishedPrision = this-firstPunishedPrision – next;
}
}
// 輸出約瑟夫環
void JosephCircle::print()
{
struct Prisoner * p = this-head;
if(p != NULL)
{
do
{
cout “[編號:” p-id “,密碼:” p-pass “]” ;
if(p-next != this-head)
{
cout” – “;
}
p = p-next;
}while(p != this-head);
}
cout endl endl;
}
// 開始處決犯人
void JosephCircle::start()
{
struct Prisoner * p = this-firstPunishedPrision,*pr,*q;
int counter = 1;
/*
因為約瑟夫環是一個循環鏈表(也就是一個圈),
當 p-next != p 的時候,說明圈裡面還有多餘一個的節點(犯人),
繼續數數並處決犯人
*/
while(p-next != p)
{
// q 向當前被處決的犯人
q = p;
// 從約瑟夫環裡面刪除被處決掉的犯人
q – pre – next = q – next;
q – next – pre = q – pre;
p = p – next;
// 輸出被處決的犯人的信息
cout “第 ” (counter++) ” 個被處決的犯人編號:” q-id endl;
// 尋找下一個將要處決的犯人
for(int i=1;i=(q-pass-1);i++)
{
p = p-next;
}
// 釋放內存(被處決掉的犯人)。
free(q);
}
// 輸出被赦免的犯人的信息
cout “被赦免的犯人的編號:” p-id endl endl;;
}
int main(int argc, char *argv[])
{
// 基本的約瑟夫環: JosephCircle(int N,int S,int D);
JosephCircle j1 = JosephCircle(3,1,2);
j1.print();
j1.start();
// 發展的約瑟夫環: JosephCircle(int N,int S,int M,int password[]);
int pass[]={1,5,3};
JosephCircle j2 = JosephCircle(3,1,2,pass);
j2.print();
j2.start();
return 0;
}
python類約瑟夫環原創問題求解 求大神
COUNT = 60 # 總人數
INDEX_FIRST = 2 # 第一次站出來的是2號
origin = list(range(1, COUNT+1))
res = []
index_label = INDEX_FIRST – 1
index_temp = 0
while origin:
index_temp = (index_label + index_temp) % len(origin)
res.append(origin.pop(index_temp))
index_label += 1
print(res)
請點擊輸入圖片描述
python約瑟夫環怎麼判
import collections
def joseph(lst,k):
t = collections.deque(lst)
while len(t) 1:
t.rotate(-k)
t.popleft()
return t
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/196433.html