其实就是找出线段中最短的那一段,,不能在线段的两端找。。 #include <cstdio> #include <climits> #include <cstring> #include <iostream> using namespace std; int main(void) { int ncase,n; int a[51000]; while(cin>>ncase) { while(ncase--) { cin>>n; for(int i=1;i<n;i++) cin>>a[i]; int min = INT_MAX; int flag =0; for(int i=2;i<n-1;i++) { if(min>=a[i]-a[i-1]) { min = a[i]-a[i-1]; flag = i; } } if(min==INT_MAX) cout<<'0'<<endl; else { printf("%d/n",a[n-1]+min); printf("%d 1 %d %d/n",flag+1,n,flag); } if(ncase) printf("/n"); } } return 0; } using vim now