c语言组合不用递归(c语言组合数递归)

本篇文章给大家谈谈c语言组合不用递归,以及c语言组合数递归对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、用C语言求组合数2、c语言程序改成不使用递归的方法3、用c语言解决快速排序算法,不用递归?4、编写c语言程序解决约瑟夫问题,要求不用递归算法5、初学c语言问题,怎样不用递归解决hanoi塔问题

用C语言求组合数

实现的算法很多, 下面给出一个不需要递归的算法; 需要设计两个函数。

unsigned long factorial (unsigned long n);

long long perm(unsigned long m, unsigned long n);

unsigned long factorial (unsigned long n)

{

unsigned long value = (n == 0) ? 1 : n;

while( n = 2 )

value *= –n;

return value;

}

long long perm(unsigned long m, unsigned long n)

{

if (m n)

return -1;

else

return (unsigned long) (factorial(n)/factorial(n-m));

}

只为了mn就要返回-1, 有点浪费啊~~~

注意求值范围, 如果需要可以int64扩展。。。

c语言程序改成不使用递归的方法

比较麻烦,我只好写一写伪代码了

void print(struct node *n)

{

定义一个存储node*的链表list

将n装入list

bool flag=true;

while(flag)

{

flag=false;

for(从list第一个元素开始遍历,记遍历到的元素为k)

{

if (k-left!=null){ 将k-left插入到list中k的前面;flag=true;}

if (k-right!=null){ 将k-right插入到list中k的后面;flag=true;}

}

}

将list从头按次序输出

}

c语言组合不用递归(c语言组合数递归)

用c语言解决快速排序算法,不用递归?

可以用循环代替啊。所有的递归都是可以用循环加堆栈一类的东西代替的。

但是那会比较恶心,恶心到连本人这么勤奋的好学生都不愿意写……

如果你竟然真的写了一遍,保证你写完之后这辈子不会再想写第二遍!!!

所以,劝你还是别写了吧……

其实那玩意就跟数组邻接表一样,几乎没什么用

顶多写出来跟同学显摆显摆:瞧,姐会写不用递归的快排$^_^$

我以前就曾经写过不用指针的数组邻接表,直接导致了我被大家pia飞~

而且如果你写那玩意写多了,就没人看的懂你的程序了,包括你自己……

(本人的数组邻接表就是例子!!!)

所以,有时间还不如去琢磨琢磨其它用处比较大的算法

另外快排这种东西我不太喜欢,代码不好写,时间复杂度未知,如果运气不好就O(n^2)了……

所以建议你改用堆排,虽然常数项大一点,但是最起码时间有保证啊!而且代码好写又好看,看着四十多行,其实翻来覆去就那几句话。写完之后如果缩进合适,远看起来特别艺术C+_+C

编写c语言程序解决约瑟夫问题,要求不用递归算法

楼主你好!

下面这个就是关于约瑟夫问题的题目,代码(不是递归的)及题目已经给出,希望对你有帮助!

原题:

n个乘客同乘一艘船,因为严重超载,加上风高浪大,危险万分,因此船长告诉乘客,只有将部分乘客投入海中,其余人才能幸免于难。无奈,大家只得同意这种办法,并议定n个人围成一圈,由第1个人数起,依次报数,数到第m人,便把他投入大海中,然后再从他的下一个人数起,数到第m人,再将他扔到大海中,如此循环地进行,直到剩下k个乘客为止。问哪些位置是将被扔下大海的位置。

#includestdio.h

#includestdlib.h

struct list{ //定义链表的节点结构

int number; //用于给乘客的位置编号

struct list*next;

};

main(){

int i,n; //n表示人数,i用于for循环

struct list*head=NULL,*p,*q,*temp,*r;

printf(“请输入船上的人数n:\n”);

scanf(“%d”,n);

for(i=1;i=n;i++){ /*根据人数n,建立带头结点head循环链表*/

p=(struct list*)malloc(sizeof(struct list));

p-number=i; //给每位乘客位置编号

if(head==NULL){head=p;}

else {q-next=p;}

q=p;

}

p-next=head;

r=head;

int m,k,a=0; //m表示乘客数到这个需要下船的数,k表示最终船上剩余的乘客人数,a用于记录乘客总共报数的次数

printf(“请输入数到需要下船的数m\n”);

scanf(“%d”,m);

printf(“请输入最终船上剩余人数k\n”);

scanf(“%d”,k);

while(r!=NULLn!=k){

++a;

if((a+1)%m==0){ /*找出需下船乘客的前一位乘客,将需下船的乘客的节点删除,并将与下船乘客的相邻的两位乘客节点连起来,保证认是一个循环链表 */

temp=r-next;

r-next=r-next-next;

printf(“编号为%d位置的乘客需要下船!\n”,temp-number); //输出下船乘客的位置编号

free(temp);

n–;

}

else r=r-next;

}

}

初学c语言问题,怎样不用递归解决hanoi塔问题

#include stdio.h

#define MAXSTACK 10   /* 栈的最大深度 */

int c = 1; /* 一个全局变量,表示目前移动的步数 */

struct hanoi { /* 存储汉诺塔的结构,包括盘的数目和三个盘的名称 */

int n;

char x, y, z;

};

void move(char x, int n, char y) /* 移动函数,表示把某个盘从某根针移动到另一根针 */

{

printf(“%d- %d from %c – %c\n”, c++, n, x, y);

}

void hanoi(int n, char x, char y, char z) /* 汉诺塔的递归算法 */

{

if (1 == n)

move(x, 1, z);

else {

hanoi(n – 1, x, z, y);

move(x, n, z);

hanoi(n – 1, y, x, z);

}

}

void push(struct hanoi *p, int top, char x, char y, char z,int n)

{

p[top+1].n = n – 1;

p[top+1].x = x;

p[top+1].y = y;

p[top+1].z = z;

}

void unreverse_hanoi(struct hanoi *p) /* 汉诺塔的非递归算法 */

{

int top = 0;

while (top = 0) {

while (p[top].n  1) { /* 向左走到尽头 */

   push(p, top, p[top].x, p[top].z, p[top].y, p[top].n);

   top++;

}

if (p[top].n == 1) { /* 叶子结点 */

   move(p[top].x, 1, p[top].z);

   top–;

}

if (top = 0) { /* 向右走一步 */

   move(p[top].x, p[top].n, p[top].z);

   top–;

   push(p, top, p[top+1].y, p[top+1].x, p[top+1].z, p[top+1].n);

   top++;

}

}

}

int main(void)

{

int i;

printf(“递归:\n”);

hanoi(3, ‘x’, ‘y’, ‘z’);

printf(“非递归:\n”);

struct hanoi p[MAXSTACK];

c = 1;

p[0].n = 3;

p[0].x = ‘x’, p[0].y = ‘y’, p[0].z = ‘z’;

unreverse_hanoi(p);

return 0;

}

关于c语言组合不用递归和c语言组合数递归的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月29日 11:25:34
下一篇 2024年3月29日 11:31:51

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    3900
  • c语言控制代码的换码序列,c语言交换代码

    求C语言编程大神解答一下下面这个编程代码? k==5,用5去除125余0,所以r=125%5中r为0。由于!0为1,所以执行while循环体:先打印出5(k的值),再n=n/k==125/5=25;由于251则再打印出*号。这一循环结果输出是5*。 下面是我的代码,三个函数分别对应三个问题。 在实现基本要求的前提下,拓展了可以从键盘输入的功能,以下为各题代码…

    2024年5月23日
    5600
  • c语言扫描io脚状态,c语言端口扫描

    求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。 单片机怎么计算1s内下降沿的个数的C语言程序或者计算两个下降沿的时间(检测脉冲频率)计算1s内下降沿的个数方法是,一个定时器设置定时1…

    2024年5月23日
    4400
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4400
  • c语言三位小数,C语言三位小数

    怎样用C++语言输出精确到小数点后三位的数? 1、用C++语言输出精确到小数点后三位的数,可以参考下面给出的代码:coutsetiosflags(ios:fixed)setprecision(3)。其中 setiosflags中set是设置的意思。ios是iostream的缩写,即输入输出流。flags是标志的意思。 2、要精确到小数点后若干位,则数据类型为…

    2024年5月23日
    7200
  • c语言21点游戏,二十一点游戏代码c语言

    如何使用C语言编写简单小游戏? 1、数学知识:长方形的面积S=a*b 长方形周长L=2*(a+b)其中a b分别为长方形的宽和高。算法分析:长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。 2、/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++0、turbo…

    2024年5月23日
    6300
  • c语言当中的null,C语言当中的符号

    C/C++中,NULL和null的区别是什么? nul 和 null要看编译器,不同的编译器有所区别。 所以C或者C++中都使用一个特殊定义NULL表示无效值,其本质就是未定义具体数据类型的0值。 null是是什么都没有的意思。在java中表示空对象。 本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是空集合。\x0d\x0a在ASCII码…

    2024年5月23日
    4500
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    4800
  • 学c语言编程,学c语言编程用什么软件

    编程开发必须要学C语言吗? 1、要学习。编程开发的学习内容主要包括c语言、python和c+语言。C语言作为一种简单灵活的高级编程语言,它是一个面向过程的语言,一般是作为计算机专业的基础入门语言课程。 2、C语言。对于刚接触编程的人来说,先学习C语言是非常重要的。C语言可以说是是计算机编程语言的鼻祖,其他的编程语言几乎全是由C语言变化衍生出来的。 3、不需要…

    2024年5月23日
    3400
  • c语言用string定义字符串,c语言中用string类型来处理字符串类型

    C++怎样定义定义字符串 1、第一是字符数组来表示字符串。用下面的语句声明:char a[10];C语言中字符数组与字符串的唯一区别是字符串末尾有一个结束符\0,而字符数组不需要。 2、在C中定义字符串有下列几种形式:字符串常量,char数组,char指针 字符串常量 即:位于一对双括号中的任何字符。双引号里的字符加上编译器自动提供的结束标志\0字符,作为 …

    2024年5月23日
    4300

发表回复

登录后才能评论



关注微信