⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 water.cpp

📁 水流在挡板中走向预测 仅有几处挡板设置。为原理演示
💻 CPP
字号:
#include<stdio.h>
#define LONG 100

int n,m;
int high[LONG]={0},high2[LONG]={0},pip[LONG]={0};
int v[LONG][LONG]={0};
int i,a,r;
int s,l=0;
//---------------------------------------------------------------------
void deal(int i,int a,int n1);

void deal1(int i,int a,int m1)
{int j,k,h;

k=0;
h=high[a];

v[i][k]=high[a];k++;
v[i][k]=m1;k++;


for(r=0;r<n;r++)
{
	if(high[r]==m1)break;
}
a=r;
a--;
while(a>=0)
{if(high[a]<v[i][k-1])
{v[i][k]=high[a];
 k++;
 }
 else if(high[a]>v[i][k-1])
 {j=k-1;
 
 while(v[i][j]<high[a])
 {if(j==0)s=v[i][j];
 v[i][j]=0;
 j--;
 if(j<0)break;
 }
 
 if(j<0)
 {	
 deal(i,a,h);break;
 }
 if(j>=0){j++;v[i][j]=high[a];}
 }
 
 a--;
 }
}

void deal(int i,int a,int n1)
{int j,k,h;



k=0;
h=high[a];

v[i][k]=high[a];k++;
v[i][k]=n1;k++;


for(r=0;r<n;r++)
{
	if(high[r]==n1)break;
}
a=r;
a++;

while(high[a]!=0)
{if(high[a]<v[i][k-1])
{v[i][k]=high[a];
 k++;
 }
 else if(high[a]>v[i][k-1])
 {j=k-1;
    
 while(v[i][j]<high[a])
	{if(j==0)s=v[i][j];
     v[i][j]=0;
     j--;
	if(j<0)break;
	}
    
 if(j<0)
	{
     deal1(i,a,h);break;
	}
   if(j>=0){j++;v[i][j]=high[a];}
 }
 a++;
 }
}


//---------------------------------------------------------------------

void main()
{int k,j;
int m1,n1;
int t,g;
scanf("%d,%d",&n,&m);//输入nm
n=n+1;
for(i=0;i<n;i++)
scanf("%d",&high[i]);//输入高度

for(i=0;i<m;i++)
scanf("%d",&pip[i]);//输入水龙头位置


for(i=0;i<m;i++)
{k=0;
a=pip[i];
m1=high[a];
n1=high[a+1];
    if(m1>n1)//左高右矮
	{a=a+2;
     v[i][k]=m1;k++;
     v[i][k]=n1;k++;
	 	 
	 for(r=0;r<n;r++)
	 {
	if(high[r]==n1)break;
	 }
     a=r;
     a++;
	 
	 while(a<n)
	 {if(high[a]<v[i][k-1])
	 {v[i][k]=high[a];
	 k++;
	 }
	 else if(high[a]>v[i][k-1])
	 {j=k-1;
	 t=high[a];
	 

	 
	 
	 while(v[i][j]<t)
	 {
	 v[i][j]=0;
	 j--;
	 if(j<0)break;
	 }
	 
	 if(j<0)
	 {     
	 deal1(i,a,m1);break;
	 }

	 if(j>=0){j++;v[i][j]=high[a];}
	 }
	 a++;
	 }
	}
	 
	 else if(m1<n1)//左矮右高
	 {a--;
     v[i][k]=n1;k++;
     v[i][k]=m1;k++;
	 
	 for(r=0;r<n;r++)
	 {
	if(high[r]==m1)break;
	 }
     a=r;
     a--;
	 
	 while(a>=0)
	 {if(high[a]<v[i][k-1])
	 {v[i][k]=high[a];
	 k++;
	 }
	 else if(high[a]>v[i][k-1])
	 {j=k-1;
	 
	 while(v[i][j]<high[a])
	 {
	 v[i][j]=0;
	 j--;
	 if(j<0)break;
	 }
	 
	 if(j<0)
	 {
	 deal(i,a,n1);break;
	 }
	 if(j>=0){j++;v[i][j]=high[a];}
	 }
	 a--;
	 }
	}
}
//------------------------------------------


printf("\n\nanswer:\n");//输出结果//
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{printf("%d ",v[i][j]);//
if(j==n-1)printf("\n");//
}                      //

for(i=0;i<n;i++)
{printf("%d ",high[i]);
if(i==n-1)printf("\n");
}
//--------------------------------------------

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -