1 条题解
-
0
C :
#include<stdio.h> #include<string.h> #include<stdlib.h> int number[1003]; int word[100000]; void make(int head,int ptail,int mid) { int i,j,k; int *x=(int *)malloc((ptail-head+1)*sizeof(int)); for (i=head,j=mid+1,k=0;i<=mid&&j<=ptail;k++) { if (number[i]<number[j]) x[k]=number[i++]; else x[k]=number[j++]; } while(i<=mid) x[k++]=number[i++]; while(j<=ptail) x[k++]=number[j++]; for (i=head,j=0;j<k;i++,j++) number[i]=x[j]; free(x); } void sort(int head,int ptail) { if (head>=ptail) return; int mid=(head+ptail)/2; sort(head,mid); sort(mid+1,ptail); make(head,ptail,mid); } int main(void) {//freopen("love.txt","r",stdin); int n,i,j; while(scanf("%d",&n)!=EOF) { if (n==0) break; memset(number,0,sizeof(number)); memset(word,0,sizeof(word)); scanf("%d",&number[0]); for (i=1;i<n;i++) { scanf("%d",&number[i]); for (j=i-1;j>=0;j--) { int sum=number[i]+number[j]; word[sum]=1; } } sort(0,n-1); int flag=0; for (i=n-1;i>=0;i--) { for (j=i-1;j>=0;j--) { int sum=number[i]-number[j]; if (word[sum]!=0) { flag=1; printf("%d\n",number[i]); break; } } if (flag==1) break; } if (flag==0) printf("no solution\n"); } return 0; }
C++ :
#include<cstdio> #include<algorithm> using namespace std; int bs(int a[],int l,int r,int x) { int m; while(l<r) { m=(l+r)>>1; if(a[m]==x) return m; if(a[m]<x) l=m+1; else r=m; } return -1; } int main() { int n,a[1000],i,j,k,bet,p,flag,ans; while(scanf("%d",&n)!=EOF,n) { for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); for(flag=0,i=n-1;i>=0;i--) { for(j=0;j<i;j++) { for(k=j+1;k<n;k++) { bet=a[i]-a[j]-a[k]; p=bs(a,k+1,n,bet); if(p!=-1&&p!=i) { ans=i; flag=1; break; } } if(flag) break; } if(flag) break; } if(flag) printf("%d\n",a[ans]); else puts("no solution"); } return 0; }
Java :
import java.util.*; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNextInt()){ int n = in.nextInt(); if(n==0) break; if(n==0) break; int[] x = new int[n]; for(int i=0;i<n;i++){ x[i] = in.nextInt(); } Arrays.sort(x); boolean a = false; for(int i=n-1;i>=3;i--){ for(int j=0;j<i;j++){ for(int k=0;k<i;k++){ if(k==j) continue; for(int m=0;m<i;m++){ if(m==j||m==k) continue; if(x[i]==x[j]+x[k]+x[m]){ a = true; System.out.println(x[i]); break; } } if(a) break; } if(a) break; } if(a) break; } if(!a){ System.out.println("no solution"); } } } }
- 1
信息
- ID
- 1655
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者