Chef和Rainbow Array(检查数组为回文数组)

时间:2017-08-26 17:43:32

标签: java arrays palindrome

Check the complete problem here

Chef同样喜欢所有阵列。但他比其他人更喜欢某些阵列。特别是,他喜欢Rainbow Arrays。

如果数组具有以下结构,则该数组为Rainbow:

首先a1元素等于1。 接下来a2元素等于2。 接下来a3元素等于3。 接下来a4元素等于4。 接下来a5元素等于5。 接下来a6元素等于6。 接下来a7元素等于7。 接下来a6元素等于6。 接下来a5元素等于5。 接下来a4元素等于4。 接下来a3元素等于3。 接下来a2元素等于2。 接下来a1元素等于1。 ai可以是任何非零正整数。 数组中没有其他元素。

帮助Chef查明给定的数组是否为Rainbow Array。 这是我的代码,在NetBeans上完美运行,但在CodeChef上说错误答案。

import java.util.Scanner;
class RAINBOWA {
public static void main(String args[])
{
    Scanner sc = new Scanner(System.in);
    int testCases, noOfElements,i,j,k;
    boolean t=false;
    testCases = sc.nextInt();
    int a [][] = new int[testCases][1000];
    String opString[];
    opString = new String[testCases];
    for(i=0; i<testCases; i++)
    {
        noOfElements = sc.nextInt();
        for(j=0; j<noOfElements; j++)
        {
            a[i][j] = sc.nextInt();
        }
        for(j=0,k=(noOfElements-1); j<(noOfElements/2); j++,k--)
        {
            if(((noOfElements%2)==0) && a[i][j]==a[i][k])
            {
               t=true;
            }
            else if((noOfElements%2)!=0 && a[i][j]==a[i][k])
            {
                if(a[i][((int)noOfElements/2)-1]+1==a[i][(int)noOfElements/2])
                {
                    t=true;
                }
            }
            else
            {
                t=false;
                break;
            }
        }
        if(t==true)
        {
            opString[i]="yes";
            t=false;
        }
        else
            opString[i]="no";
    }
    for(i=0; i<testCases; i++)
    {
        System.out.println(opString[i]);
    }
}

}

4 个答案:

答案 0 :(得分:0)

(Chef和Rainbow数组问题代码:RAINBOWA)的Java 100%解决方案

 import java.util.*;
 class Rainbowa
 {
   public static String rainbowa(int[] s)
   {
       int i,j,n=s.length;
       if(s[0]!=1)
         return "no";

       for(i=0,j=n-1;i<j;i++,j--)
          if((s[i]!=s[j]) || (s[i+1]-s[i]>1 )|| ( s[i+1]-s[i]<0 ) || (s[i]<1 )|| (s[i] > 7))
               break;

          if(i<j || s[i]!=7)
             return "no";
       return "yes";
    }

    public static void main(String args[])
    {
       Scanner sc=new Scanner(System.in);
       int t;
       t=sc.nextInt();
       for(int i=0;i<t;i++)
       {
          int n,val;
          n=sc.nextInt();
          int[] Arr=new int[n];
          for(int j=0;j<n;j++)
          {
              Arr[j]=sc.nextInt();
          }
           String str = rainbowa(Arr);
           System.out.println(str);
       }
    }
 };

答案 1 :(得分:0)

我希望以下解决方案是最干净的

public static String isRainbowArray(int[] arr) {
        if(arr == null || arr.length == 0) return "no";

        int currentNumber = 1;
        int mid = arr.length/2;
        int left = 0;
        int right;

        while (left <= mid) {
            right = arr.length - 1 - left;
            if(arr[left] == currentNumber && arr[right] == currentNumber) {
                left++;
                continue;
            }

            currentNumber++;
            if(arr[left] != currentNumber || arr[right] != currentNumber) {
                return "no";
            }
        }

        return currentNumber == 7 ? "yes": "no";
    }

答案 2 :(得分:-1)

import java.util.Scanner; 
public class rainbow {
    public static void main(String s[]) {
        int n,flag=0,no;

        Scanner in=new Scanner(System.in);

        System.out.print("Enter number of iterations");

        no=in.nextInt();

        for(int z=0;z<no;z++) {
            System.out.print("Enter the value of n");
            n=in.nextInt();

            int[] a=new int[n];

            System.out.print("Enter the values of array");

            for(int i=0;i<n;i++)
                a[i]=in.nextInt();

            if((a[n/2]+1)==a[n/2] || (a[n/2]+1)>a[n/2]) {
                for(int i=0;i<n/2;i++) {
                    if(a[i]==a[i+1] || a[i+1]==a[i]+1) {
                        int m=n-1;

                        for(int j=0;j<n/2;j++) {
                            if(a[i]==a[(n-1)-i])
                                flag=1
                            else
                                flag=0;
                        }
                    }
                    else
                        flag=0;
                }
            }
            else
                flag=0;

            if(flag==1)
                System.out.print("rainbow array\n");
            else
                System.out.print("not a rainbow array\n");
        }
    }
}

答案 3 :(得分:-1)

codechef-chef-and-rainbow-array-问题 100%解决了c ++解决方案

   #include<bits/stdc+++.h>
   using namespace std;
   string rainbowa(vector<int> s)
   {
     if(s[0]!=1)
         return "no";
     int i,j,n=s.size();
     for(i=0,j=n-1;i<j;i++,j--)
         if(((s[i]!=s[j]) || s[i+1]-s[i]>1 || s[i+1]-s[i]<0  || s[i]<1 || s[i] > 7))
            break;;

     if(i<j || s[i]!=7)
       return "no";
    return "yes";
   }

int main()
{
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int q;
  cin >> q;
  while(q--)
  {
    int n;
    cin>>n;
    vector<int> arr;
    for (int q_itr = 0; q_itr < n; q_itr++)
    {
        int s;
        cin>>s;
        arr.push_back(s);
    }
    string s = rainbowa(arr);
    cout<<s<<endl;
 }
  return 0;}