鸽洞原理

版权声明:转载商用请通知本人 https://blog.csdn.net/qq_41076577/article/details/83420134

鸽洞原理

(任意给定5个数字,其中必定存在3个数字已经有序或者升序,或者降序),找出这5个数字中最长的升序或者降序序列。10个数字必定有4个有序

#include<stdio.h>
#include<string.h>
#include<conio.h>
#define M 2//C5M
void Compose(char *str,char *rstr,int n,int lyr,int k);
int panding(char *str,int n);
int main()
{
	char str[]="17539";
	char rstr[10];
	int i;
	memset(rstr,0,10);
	for(i=0;i<2;i++)
	Compose(str,rstr,M+i,0,i);
	getch();
	return 0;
}
void Compose(char *str,char* rstr,int n,int lyr,int k){
	
	int i;
	if(lyr==M+k)
	{
		rstr[M+k]=0;
		if(panding(rstr,M+k)==1)
		puts(rstr);
		return;
		
	}
	for(i=0;str[n-1+i]!=0;i++)
	{
		rstr[lyr]=str[i];
		Compose(&str[i+1],rstr,n-1,lyr+1,k);
	}
}
int panding(char *str,int n)
{
	int i,count1=0,count2=0;//1表示有序
	for(i=0;i<n-1;i++)
	{
		if(str[i]<=str[i+1])
		count1++;
	 }
	 for(i=0;i<n-1;i++)
	 {
	 	if(str[i]>=str[i+1])
	 	count2++;
	  } 
	  if((count1==n-1)||(count2==n-1))
	  return 1;
	  else
	  return 0;
}
   

猜你喜欢

转载自blog.csdn.net/qq_41076577/article/details/83420134
今日推荐