搜狐第一题看意思看了好久了 = =

难的是理解题目的意思啊,第二道题有简单的解法吗?没来得及,罗列情况弄好久,最后没时间
import java.util.LinkedList;
import java.util.Scanner;

public class 卡拉卡斯卡 {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
//		while(sc.hasNext()){
			int n = sc.nextInt();
			int m = sc.nextInt();
			int[] a = new int[m];
			for(int i=0;i<m ;i++){
				a[i] = sc.nextInt();
			}
			
			kolakoski(a,n);
	//	}
	}

	private static void kolakoski(int[] a, int n) {
		
		LinkedList<Integer> res = new LinkedList<Integer>();
		int i,j,temp,k;
		for( i=0;i<a[0];i++){
			res.add(a[0]);
		}
		j=1;
		for(i=1;res.size()<n;i++){
			if(i==res.size())
				temp = a[j];
			else
				temp = res.get(i);
			for(k=0;k<temp ;k++){
				res.add(a[j]);
				
			}
			j++;
			if(j%a.length ==0)
				j=0;
		}
			
		for(i=0;i<n;i++)
			System.out.println(res.get(i));
	}		

}

全部评论
第一道题的大致思路是:Kolakoski序列变换后还是Kolakoski序列本身。那么就需要有两个索引变量,一个是Kolakoski序列索引k_index,一个是变换后的Kolakoski序列所以c_index。因为变换前后都是同一个串,所以可以就在一个Kolakoski序列上进行构造操作。也就是说,当前Kolakoski序列的第i个同数字构成子串的长度将成为变换后的Kolakoski序列中的第i个数字(也就是多对一),换而言之,变换后的Kolakoski序列的数对应变换前的Kolakoski序列的子串长度。 给定的数组a[]={1,2},那么开始构造:(粗略思路如下) 1) 不断循环地依次从a中取数,用索引index代表即为a[index]; 2) 如果Kolakoski序列空,则直接添加a[index]进入Kolakoski序列,否则判断当前取的数a[index]和现在构造的Kolakoski序列的最后一个数是否相同值,如果相同,则index++(判断越界,若越界则index=0),否则就将这个值赋给Kolakoski序列,此时操作k_index++。 3) 然后进行Kolakoski[c_index] - 1次循环讲现在的a[index]数添加进去(即Kolakoski[k_index] = a[index]; k_index++),当k_index == n时,输出这个Kolakoski序列。 4) index++并判断是否越界,c_index++。这样不断循环上述步骤,就能求出Kolakoski序列了
点赞 回复
分享
发布于 2017-08-28 22:47
+1,。。。后来一直拼命罗列情况,然而时间根本就来不及了
点赞 回复
分享
发布于 2017-08-28 21:04
阿里巴巴
校招火热招聘中
官网直投
我又把第一题看了很久,可还是没看懂。
点赞 回复
分享
发布于 2017-08-28 21:04
第二题至今不懂到底能不能按照体积来
点赞 回复
分享
发布于 2017-08-28 21:48

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务