告诉你一个重下至下放置的正字母三角形,按字母顺序输出其中能构成正三角形的字母
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define Ni 145
struct node{
double x,y;
}b[Ni];
double abs1(double kk){
if (kk<0) return -kk;
else return kk;
}
int c[4],next[Ni],first[27],uu;
double di(int k1,int k2){
double distance=0;
distance=pow(abs1(b[k1].x-b[k2].x),2)+pow(abs1(b[k1].y-b[k2].y),2);
return distance;
}
void deal(int u,int k){
c[k]=u;
if (k==3){
if (abs1(di(c[1],c[2])-di(c[2],c[3]))<1e-6 && abs1(di(c[1],c[2])-di(c[1],c[3]))<1e-6) uu=1;
return ;
}
int j=next[u];
while (j!=0){
deal(j,k+1);
j=next[j];
if (uu) return ;
}
return ;
}
int main (void){
int n,s,ans,i,j,used[27];
char a;
while (1){
scanf("%d",&n);
if (n==0) break;
s=0;
ans=0;
getchar();
for (i=1;i<=26;i++) {first[i]=0;used[i]=0;}
for (i=0;i<n;i++){
for (j=0;j<=i;j++){
scanf("%c",&a);
s++;
b[s].x=(n-i-1+j*2)*0.5;
b[s].y=(n-i-1)*sqrt(3)/2;
next[s]=first[a-96];
first[a-96]=s;
used[a-96]++;
}
}
for (i=1;i<=26;i++)
if (used[i]>=3) {
uu=0;
deal(first[i],1);
if (uu==1) {
ans++;
printf("%c",(char)(96+i));
}
}
if (ans==0) printf("LOOOOOOOOSER!\n");
else printf("\n");
}
return 0;
}