本文目录一览:
- 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