zoj1101

来源:互联网 发布:网络层协议 编辑:程序博客网 时间:2024/06/05 20:18

题目大意:

有n个赌徒玩一个游戏:
首先,每个赌徒盖住他们的筹码,同时助理保证他们的筹码数各不相同。如果一个人没钱了,他可以借钱,但是他的筹码需要为负数。
然后他们翻开他们的筹码,赢家是那个正好等于其他三个人筹码总和的人。如果有多个满足条件的人,那么最大的那个是赢家。

解题思路:

其实就是先排序然后再遍历,我的代码比较冗余,圈复杂度比较高,不过我的准则就是ac万岁,大家不要学我。

代码如下:

#include<stdio.h>#include<string.h>#include<stdlib.h>int cmp(const void *a,const void *b){  return (*(int *)a-*(int *)b);}int main(){  int n,i,j,k,l;  int flag;  int num[1010];  while(scanf("%d",&n)&&n)  {    flag=0;    for(i=1;i<=n;i++)    {      scanf("%d",&num[i]);    }      qsort(num+1,n,sizeof(int),cmp);    for(i=n;i>0;i--)    {      for(j=n;j>0;j--)      {        if(i==j)          continue;        for(k=1;k<j;k++)        {          for(l=1;l<j;l++)          {            if(l==k)              continue;            if(num[i]==num[j]+num[k]+num[l])            {              printf("%d\n",num[i]);              flag=1;              break;            }          }          if(flag==1)            break;        }        if(flag==1)          break;      }      if(flag==1)        break;    }    if(flag==0)      printf("no solution\n");  }  return 0;}
0 0