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]);
}
}
}
答案 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;}