zoukankan      html  css  js  c++  java
  • 小希的数表题解

    代码:

      1 #include<iostream>
      2 #include<cstring>
      3 #include<algorithm>
      4 #define N 5005
      5 using namespace std;
      6 
      7 int a[N*(N-1)/2];
      8 int b[N*(N-1)/2];
      9 //int c[N*(N-1)/2];
     10 //bool flag[N*(N-1)/2];
     11 int x[N+5];
     12 
     13 int Add(int i,int j)
     14 {
     15     return x[i]+x[j];
     16 }
     17 
     18 int main()
     19 {
     20     int n;
     21     while(cin>>n)
     22     {
     23         if(n==0)
     24         {
     25             break;
     26         }
     27         memset(x,0,sizeof(x));
     28         memset(a,0,sizeof(a));
     29         for(int i=1; i<=n*(n-1)/2; i++)
     30         {
     31             cin>>a[i];
     32             b[i]=a[i];
     33         }
     34         //sort(a+1,a+1+(n*(n-1)/2));
     35         for(int l=3; l<=n; l++)
     36         {
     37             for(int i=1; i<=n*(n-1)/2; i++)
     38             {
     39                 a[i]=b[i];
     40             }
     41             x[3]=(a[2]-a[1]+a[l])/2;
     42             x[2]=a[l]-x[3];
     43             x[1]=a[1]-x[2];
     44             if(n==3)
     45             {
     46                 cout<<x[1]<<" "<<x[2]<<" "<<x[3]<<endl;
     47                 continue;
     48             }
     49             //x[4]=a[4]-x[1];
     50 
     51             for(int i=2; i<=3; i++)
     52             {
     53                 for(int j=1; j<i; j++)
     54                 {
     55                     for(int k=1; k<=n*(n-1)/2; k++)
     56                     {
     57                         if(a[k]==Add(j,i))
     58                         {
     59                             a[k]=-1;
     60                             break;
     61                         }
     62                     }
     63                     //flag[Add(i,j)]=1;
     64                 }
     65 
     66             }
     67 
     68             for(int i=4; i<=n; i++)
     69             {
     70                 for(int j=1; j<i; j++)
     71                 {
     72                     //flag[Add(i,j)]=1;
     73                     if(j==1)
     74                     {
     75                         int k=1;
     76                         for(; k<=n*(n-1)/2; k++)
     77                         {
     78 
     79                             if(a[k]!=-1)
     80                             {
     81                                 //temp=a[k];
     82                                 break;
     83                             }
     84 
     85                         }
     86                         x[i]=a[k]-x[1];
     87                         //cout<<x[i]<<endl;
     88                     }
     89                     for(int k=1; k<=n*(n-1)/2; k++)
     90                     {
     91                         if(a[k]==Add(j,i))
     92                         {
     93                             a[k]=-1;
     94                             break;
     95                         }
     96                     }
     97                     //flag[Add(x[j],x[i])]=0;
     98                 }
     99 
    100             }
    101             for(int i=1; i<=n*(n-1)/2; i++)
    102             {
    103                 a[i]=b[i];
    104             }
    105             bool can=1;
    106             for(int i=2; i<=n; i++)
    107             {
    108                 for(int j=1; j<i; j++)
    109                 {
    110                     bool mark=0;
    111                     for(int k=1; k<=n*(n-1)/2; k++)
    112                     {
    113                         if(a[k]==Add(j,i))
    114                         {
    115                             //cout<<b[k]<<endl;
    116                             a[k]=-1;
    117                             mark=1;
    118                             break;
    119                         }
    120                     }
    121                     if(mark==0)
    122                     {
    123                         can=0;
    124                         //cout<<"111"<<endl;
    125                         break;
    126                     }
    127                 }
    128                 if(can==0)
    129                 {
    130                     //cout<<"222"<<endl;
    131                     break;
    132                 }
    133 
    134             }
    135             if(can==1)
    136             {
    137                 for(int i=1; i<=n; i++)
    138                 {
    139                     if(i<n)
    140                     {
    141                         cout<<x[i]<<" ";
    142                     }
    143                     else
    144                     {
    145                         cout<<x[i]<<endl;
    146                     }
    147                 }
    148                 break;
    149             }
    150         }
    151 
    152     }
    153     return 0;
    154 }
  • 相关阅读:
    项目中openlayer中使用,完整解决方案(数据库矢量数据,动态更新,分层,编辑)
    openlayer
    关于splitViewController自己的总结....
    GIS底层开发总结
    判断联网 phone
    nsdate 前一天 后一天
    ObjectiveC 字符处理函数 全 substring indexof
    oracle
    Windows Xp上跑IIS5.1x 用户访问过多出错
    Jquery中替换节点的方法replaceWith()和replaceAll()
  • 原文地址:https://www.cnblogs.com/chenhongarticles/p/9304523.html
Copyright © 2011-2022 走看看