蛇形图+环状字典+八皇后

1.蛇形图问题

#include<iostream>
#include<string.h>
#define max 100
using namespace std;
int a[max][max];
int main()
{
	int x,y,n,tot=0;
	cin>>n;
	memset(a,0,sizeof(a));
	tot=a[x=0][y=n-1]=1;
	while(tot<n*n)
	{
		while(x+1<n&&!a[x+1][y]) a[++x][y]=++tot;
		while(y-1>=0&&!a[x][y-1]) a[x][--y]=++tot;
		while(x-1>=0&&!a[x-1][y]) a[--x][y]=++tot;
		while(y+1<n&&!a[x][y+1]) a[x][++y]=++tot;
	}
	for(x=0;x<n;x++)
	{
		for(y=0;y<n;y++)
		printf("%3d",a[x][y]);
		printf("\n");
	}
	return 0;
}

2.环状序列字典

//环状序列分析:在一个封闭的圆环内寻找到一个起点使其为最优化字典序列,设定字符数组为s[i],s[(p+i)%n]与s[(q+i)%n]比较
#include <stdio.h>
#include <string.h>
#define max 105

int less(const char*s,int p,int q)
{
	int n=strlen(s);
	for(int i=0;i<n;i++)
	{
		if(s[(p+i)%n]!=s[(q+i)%n]) return s[(p+i)%n]<s[(q+i)%n];
	}
	return 0;
}

int main()
{
	int T,n;
	char s[max];
	scanf("%d",&T);
	while(T--)
	{
		scanf("%s",s);
		int ans=0;
		int n=strlen(s);
		for(int i=1;i<n;i++)
			if(less(s,i,ans)) ans=i;
		for(i=0;i<n;i++)
			putchar(s[(i+ans)%n]);
		putchar('\n');
	}
	return 0;
}

3、约瑟夫环

/*#include<stdio.h>
int main()
{
	int n,m,i,s=0;
	printf("N M= ");
	scanf("%d%d",&n,&m);
	for(i=2;i<=n;i++)
	{
		s=(s+m)%i;	
	}
	printf("The winner is%d\n",s+1);
	return 0;
}
#include<stdio.h>
int main()
{
	int y(int n,int m);
	int a,b,c;
	scanf("%d%d",&a,&b);
	c=y(a,b);
	printf("最后一个数为:%d\n",c);
}
int y(int n,int m)
{
	int x;
	if(n==1)
		x=1;
	else
	{
		x=(y(n-1,m)+m)%n;
		if(x==0) x=n;
	}
	return x;
}*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int y(int n,int m);
	int p,q,r;
	printf("请输入参选人的个数p和开始的位置q:\n");
	scanf("%d%d",&p,&q);
	r=y(p,q);
	printf("最后那个人的初始位置是:%d\n",r);
}
int y(int n,int m)
{
	int i,j=0,s=0,l;
	int *a=(int *)malloc(sizeof(int));
	int *b=(int *)malloc(sizeof(int));
	for(i=0;i<n;i++)
	{
		a[i]=i+1;
	}
	a[n]=-1;
	for(i=0;j!=n;i++)
	{
		if(a[i]==-1) 
			i=0;
		if(a[i]!=0 && a[i]!=-1)
			s++;
		if(s==m)
		{
			b[j]=a[i];
			a[i]=0;
			j++;
			s=0;
		}
	}
	for(i=0;i<n;i++)
	{
		printf("%5d",b[i]);
	}
	printf("\n");
	l=b[n-1];
	return l;
}


4、八皇后问题

#include <stdio.h> 

int ans[92][8], n, b, i, j, num, hang[8]; 

void queen(int i){ 

    int j, k; 

    if(i == 8){ //一组新的解产生了 

        for(j = 0; j < 8; j++)  ans[num][j] = hang[j] + 1; 

        num++; 

        return; 

    } 

    for (j=0; j<8; j++){ //将当前皇后i逐一尝试放置在不同的列 

        for(k=0; k<i; k++) //逐一判定i与前面的皇后是否冲突 

            if( hang[k] == j || (k - i) == (hang[k] - j) || (i - k) == (hang[k] - j )) break; 

        if (k == i) {  //放置i,尝试第i+1个皇后 

            hang[i] = j; 

            queen(i + 1); 

        } 

    } 

} 

void main( ){ 

    num=0; 

    queen(0); 

    scanf(“%d”, &n); 

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

        scanf(“%d”, &b); 

        for(j = 0; j < 8; j++)  printf(“%d”, ans[b - 1][j]); 

        printf(“\n”); 

    } 

} 

猜你喜欢

转载自blog.csdn.net/qq_41879767/article/details/82792144