C语言算法2 巴斯卡三角形と三色棋 c语言排序算法

1.巴斯卡三角形

题目要求:

C代码:

#include<stdio.h>

long combo(int n, int r)
{
int i;
long p=1;
for(i=1;i<=r;i++)
{
p=p*(n-i+1)/i;//这里没有采用斯巴卡三角形的特性,即下数等于上面两数之和,而是通过行列的关系推出。
}
return p;
}//当然也可以利用二维数组计算,利用下数等于上面两数之和。(这里就不写了)

int main()
{
int n,r,t,m;
scanf("%d",&m);
for(n=0;n<=m;n++)
{
for(r=0;r<=n;r++)
{
int i;
if(r==0)
{
for(i=1;i<=(m-n);i++)
printf("");//排版设计,即输入空格
}
else
printf("");
printf("%d",combo(n,r));
}
printf("n");
}
return 0;
}

2.三色棋三色旗的问题最早由E.W.Dijkstra所提出,他所使用的用语为DutchNationFlag(Dijkstra为荷兰人),而多数的作者则使用Three-ColorFlag来称之。假设有一条绳子,上面有红、白、蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您希望将之分类,并排列为蓝、白、红的顺序,要如何移动次数才会最少,注意您只能在绳子上进行这个动作,而且一次只能调换两个旗子。解法: 立起三根FLAG,蓝色FLAG,白色FLAG,红色FLAG。白色FLAG和蓝色FLAG放在开始的位置,红色FLAG放在结尾的位置,然后通过白色FLAG的移动来实现旗子的调换。当白色FLAG碰到蓝色旗子时,白色FLAG的旗子与蓝色FLAG的旗子对换,蓝色FLAG加一格,白色FLAG向前加一格;白色FLAG碰到红色旗子时,白色FLAG的旗子与红色FLAG的旗子对换,红色FLAG减一格,白色FLAG不加;白色FLAG遇到白色旗子时,白色FLAG加一格,不做其他操作。一直到白色FLAG碰到红色FLAG为止。C代码:#include<stdio.h>
#include<string.h>
#include
char color[100];
void swap(int x,int y)//用于交换旗子
{
char t;
t=color[x];
color[x]=color[y];
color[y]=t;
}int main()
{
char temp;
int k=0;
scanf("%c",&temp);
while(temp!='n')
{
color[k]=temp;
k++;
scanf("%c",&temp);
}
intwflag=0;//三根FLAG
int bflag=0;
int rflag=k-1;
int i;
while(wflag<=rflag)
{
if(color[wflag]=='w')
wflag++;
elseif(color[wflag]=='b')
{
swap(bflag,wflag);
bflag++;
C语言算法(2)巴斯卡三角形と三色棋 c语言排序算法
wflag++;
}
else
{
while(wflag
rflag--;
swap(rflag,wflag);
rflag--;
}
}
for(i=0;i
printf("%c",color[i]);
printf("n");
return 0;
}

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/261607.html

更多阅读

声明:《C语言算法2 巴斯卡三角形と三色棋 c语言排序算法》为网友十里温柔分享!如侵犯到您的合法权益请联系我们删除