2330 - 排三角形

12,······,99个数排成下列形态的三角形。

                        a

                     b      c

                  d            e

                f     g     h     i

   

    其中:ai分别表示12,······,9中的一个数字,并要求同时满足下列条件:

    1a<f<i;

    2b<d, g<h, c<e

    (3)a+b+d+f=f+g+h+i=i+e+c+a=P


程序要求:<span></span> 

<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>根据输入的边长之和<span>P,</span><span style="line-height:1.5;">输出所有满足上述条件的三角形的个数。</span> 

<span style="line-height:1.5;"><br />

<br />

题目输入

每个测试文件只包含一组测试数据,每组输入一个整数P,表示边长之和。


题目输出

对于每组输入数据,输出所有满足上述条件的三角形的个数。

如果无解,则输出"Not exist"(引号不输出)。


输入/输出样例

题目输入

23

题目输出

2

C语言解答

#include<stdio.h>
int main()
{
	int k[9]={1,2,3,4,5,6,7,8,9};
	int a,b,c,d,e,f,g,h,i,j,l=0,m,n,o,p,q,r,s,t,u,P;
	scanf("%d",&P);
	for(j=0;j<9;j++)
	{
		a=k[j];
		for(m=0;m<9;m++)
		if(a!=k[m])
		{
			b=k[m];
			for(n=0;n<9;n++)
			
				if(k[n]!=a&&k[n]!=b)
				{
					c=k[n];
					for(o=0;o<9;o++)
					
						if(k[o]!=a&&k[o]!=b&&k[o]!=c)
						{
							d=k[o];
							for(p=0;p<9;p++)
							
								if(k[p]!=a&&k[p]!=b&&k[p]!=c&&k[p]!=d)
								{
									e=k[p];
									for(q=0;q<9;q++)
									
										if(k[q]!=a&&k[q]!=b&&k[q]!=c&&k[q]!=d&&k[q]!=e)
										{
											f=k[q];
											for(r=0;r<9;r++)
										    
												if(k[r]!=a&&k[r]!=b&&k[r]!=c&&k[r]!=d&&k[r]!=e&&k[r]!=f)
												{
													g=k[r];
													for(s=0;s<9;s++)
													if(k[s]!=a&&k[s]!=b&&k[s]!=c&&k[s]!=d&&k[s]!=e&&k[s]!=f&&k[s]!=g)
													{
														h=k[s];
														for(t=0;t<9;t++)
														
															if(k[t]!=a&&k[t]!=b&&k[t]!=c&&k[t]!=d&&k[t]!=e&&k[t]!=f&&k[t]!=g&&k[t]!=h)
															{
																i=k[t];
																if(a<f&&f<i&&b<d&&g<h&&c<e&&a+b+d+f==f+g+h+i&&f+g+h+i==i+e+c+a&&i+e+c+a==P)
																l=l+1;
															}
														
													}
												}
											
										}
									
								}
							
						}
					
				}
			
		}
	}
	
		if(l==0)
			printf("Not exist");
		else
		printf("%d",l);
		return 0;
}

C++解答

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int p;int count=0;
	while (cin>>p)
	{
	count=0; 
    int arr[9];
    int i;
    for (i=0;i<9;i++) arr[i]=i+1;
    while (next_permutation(arr,arr+9))
    {
    	if (arr[0]<arr[5] && arr[5]<arr[8])
    	  if (arr[1]<arr[3] && arr[6]<arr[7] && arr[2]<arr[4])
    	    if (arr[0]+arr[1]+arr[3]+arr[5]==p &&
			    arr[8]+arr[6]+arr[7]+arr[5]==p &&
				arr[0]+arr[2]+arr[4]+arr[8]==p )
                   count++;
    }
    if (count)
          cout<<count<<endl;
    else cout<<"Not exist"<<endl;
    }
	return 0;
} 
时间限制 1 秒
内存限制 125 MB
讨论 统计
上一题 下一题