当前位置:首页 » 编程语言 » c语言单纯麻将算法
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言单纯麻将算法

发布时间: 2022-08-14 20:57:34

c语言简单算法介绍

第一步:p=1,第二步:i=2,第三步:应该是p*i赋值给p,所以p*i=1*2 赋值给p
也就是现在的p=1*2,第四步:把i+1赋值给i,此时i=3,第五步:判断i是否大于五,没有返回到第三步:把p*i赋值给p,所以p*i=1*2*3 赋值给p
也就是现在的p=1*2*3,第四步:把i+1赋值给i,此时i=4,第五步:判断i是否大于五,没有返回到第三步:把p*i赋值给p,所以p*i=1*2*3*4 赋值给p
也就是现在的p=1*2*3*4,第四步:把i+1赋值给i,此时i=5,第五步:判断i是否大于五,没有返回到第三步:把p*i赋值给p,所以p*i=1*2*3*4*5 赋值给p
也就是现在的p=1*2*3*4*5,第四步:把i+1赋值给i,此时i=6,第五步:判断i是否大于五,有,结束。此时p=1*2*3*4*5=5!
这样i+1就是为了使得后面的乘3,乘4,乘5做准备的!

⑵ c语言常用算法有哪些

0) 穷举法
穷举法简单粗暴,没有什么问题是搞不定的,只要你肯花时间。同时对于小数据量,穷举法就是最优秀的算法。就像太祖长拳,简单,人人都能会,能解决问题,但是与真正的高手过招,就颓了。
1) 贪婪算法
贪婪算法可以获取到问题的局部最优解,不一定能获取到全局最优解,同时获取最优解的好坏要看贪婪策略的选择。特点就是简单,能获取到局部最优解。就像打狗棍法,同一套棍法,洪七公和鲁有脚的水平就差太多了,因此同样是贪婪算法,不同的贪婪策略会导致得到差异非常大的结果。
2) 动态规划算法
当最优化问题具有重复子问题和最优子结构的时候,就是动态规划出场的时候了。动态规划算法的核心就是提供了一个memory来缓存重复子问题的结果,避免了递归的过程中的大量的重复计算。动态规划算法的难点在于怎么将问题转化为能够利用动态规划算法来解决。当重复子问题的数目比较小时,动态规划的效果也会很差。如果问题存在大量的重复子问题的话,那么动态规划对于效率的提高是非常恐怖的。就像斗转星移武功,对手强它也会比较强,对手若,他也会比较弱。
3)分治算法
分治算法的逻辑更简单了,就是一个词,分而治之。分治算法就是把一个大的问题分为若干个子问题,然后在子问题继续向下分,一直到base cases,通过base cases的解决,一步步向上,最终解决最初的大问题。分治算法是递归的典型应用。
4) 回溯算法
回溯算法是深度优先策略的典型应用,回溯算法就是沿着一条路向下走,如果此路不同了,则回溯到上一个
分岔路,在选一条路走,一直这样递归下去,直到遍历万所有的路径。八皇后问题是回溯算法的一个经典问题,还有一个经典的应用场景就是迷宫问题。
5) 分支限界算法
回溯算法是深度优先,那么分支限界法就是广度优先的一个经典的例子。回溯法一般来说是遍历整个解空间,获取问题的所有解,而分支限界法则是获取一个解(一般来说要获取最优解)。

⑶ C语言 洗牌算法

/*洗牌程序:用任何语言,随机分配52张扑克牌到52个位置上,每个位置只容许放一张牌
用1-13表示红心A--K
14-26表示黑桃A,2,3-,Q,K
27-39表示方块A,2,3-,Q,K
40-52表示黑桃A,2,3-,Q,K
也就是生成1-52不重复的随机数,放到数组中*/

#include<iomanip.h>
#include<stdlib.h>
#include<time.h>

const int N=52;
static int a[N];

int create(int n)
{
return (1+rand()%52);
}

int main()
{
int i,j;
srand(time(0));
for(i=0;i<N;++i)
{
a[i]=create(N);
for(j=0;j<i;++j)
{
if(a[j]==a[i])
{
a[i]=(a[i]+1)%52;
}
}
cout<<setw(5)<<a[i];
}
cout<<endl;
return 0;
}

⑷ C语言 VC/TC环境下的麻将游戏,最好是长沙麻将代码,

发送到了

⑸ 用c语言编写判断14张麻将牌有没有暗杠

搞个数组,把相同牌都做个统计,统计结果记录在数组里面,看看最后结果有4没有?

⑹ C语言,扑克牌顺子的算法

rank用来循环检查A-K的牌有没有,第一个while循环定位到第一张存在的牌,接着的for循环是检查连续的有几张存在的牌。这个张数如果正好等于一手牌的张数,那就是顺子。如果不是,比如34578,for得到的值只有3,只有顺子才是5

⑺ 求一个关于麻将程序的思路(c语言)

组成胡牌的规则只有两种,三个相同或者三个排成顺序(也就是相邻)
可能有很多对,那么分别挑出,这个是必须的,剩下的赋值新的数组中,这是这个新的数组有12个数据
如定义
int guize1(int *b) //这里b有三个数据,三个数相同
{
if(b[0]==b[1]&&b[1]==b[2]&&b[0]==b[1])
return 1;
return 0; //这里加不加else都可以
}
int guize2(int *c) //这里c有三个数据,三个数是顺序的
{
int x[3];
int i,j,t;
for(i=0;i<3;i++) //赋值新的数组,因为数组数组改变可以影响到调用它的函数中的数值
x[i]=c[i];
for(i=0;i<3;i++) //x数值排序,随便选一个,我的可能不对,呵呵
for(j=i+1;j<3;j++)
if(x[i]<x[j])
{
t=x[i];
x[i]=x[j];
x[j]=t;

}
if(x[0]=x[1]-1&&x[1]==x[2]-1) //顺序的话返回1
return 1;
return 0;
}
int huipai(int *a) //这里a数组有12个数据
{
//这里就需要枚举了,没别的办法
int i,j,k;
int y[3];

for(i=0;i<10;i++)
for(j=i+1;j<11;j++)
for(k=j+1;k<12;k++) //这三个循环就是所有的情况吧,你想想

{
y[0]=a[i];
y[1]=a[j];
y[2]=a[k];

if(guize1(y)||guize2(y)) //判断是否构成关系,直接调用子函数即可
return 1;
}

}

主函数中调用子函数的程序
int pai[14] ; //这里放14个数据,初始化自己搞定
int hpai[12];
//排序14个数据自己搞定
int i,j,k;

for(i=0;i<13;i++)
{
if(pai[i]==pai[i+1]) //如果有对

{
k=0;

for(j=0;j<i;j++) //分两段赋值新的数组

hpai[k++]=pai[j];
for(j=i+2;j<14;j++)
hpai[ k++]=pai[j];
}
if(hupai(hpai))
printf("yes");
else
printf("no");

}

⑻ c语言能设计麻将桌程序吗

C语言连操作系统都能实现,当然能设计你需要的麻将桌程序了

⑼ 来个c语言算法大神帮帮忙!

#include<stdio.h>

#include<string.h>

void makeLDR(char DLR[],char LDR[],char LRD[],int n1)

{ int n2;

char *p=strchr(LDR,DLR[0]);

n2=p-LDR; //左子树节点数

LRD[n1-1]=DLR[0]; //赋后序根节点

if(n2>0)makeLDR(DLR+1,LDR,LRD,n2); //递归建立左子树的后序

if(n1-n2>1)makeLDR(DLR+1+n2,LDR+n2+1,LRD+n2,n1-n2-1); //递归建立右子树的后序

}

int main()

{ int i,n;

char DLR[50],LDR[50],LRD[50],c;

for(i=0,c=' '; c!=' ';) //读入左子树序列

scanf("%c%c",&DLR[i++],&c);

for(i=0,c=' '; c!=' ';) //读入右子树序列

scanf("%c%c",&LDR[i++],&c);

DLR[n=i]=LDR[i]=LRD[i]='';

makeLDR(DLR,LDR,LRD,n);

printf("后序序列: ");

for(i=0;i<n;i++)

printf("%c%c",LRD[i],i==n-1?' ':',');

return 0;

}

⑽ c语言中什么是算法有哪些描述算法的例子

1、有穷性(有限性)。任何一种提出的解题方法都是在有限的操作步骤内可以完成的。
如果在有限的操作步骤内完不成,得不到结果,这样的算法将无限的执行下去,永远不会停止。除非手动停止。例如操作系统就不具有有穷性,它可以一直运行。
2、一个算法应该具有以下七个重要的特征:
1)有穷性(finiteness)
算法的有穷性是指算法必须能在执行有限个步骤之后终止
2)确切性(definiteness)
算法的每一步骤必须有确切的定义;
3)输入项(input)
一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
4)输出项(output)
一个算法有一个或多个输出,以反映对输入数据加工后的结果.没有输出的算法是毫无意义的;
5)可行性(effectiveness)
算法中执行的任何计算步都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成;
6)
高效性(high
efficiency)
执行速度快,占用资源少;
7)
健壮性(robustness)
健壮性又称鲁棒性,是指软件对于规范要求以外的输入情况的处理能力。所谓健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。