Kolakoski序列--输入任意数,输出前n个数

来源:互联网 发布:在淘宝买手机卡靠谱吗 编辑:程序博客网 时间:2024/05/18 01:21


package com.main;import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main {    //n表示输出序列的前多少个元素,m表示输入几个数,array表示输入的数组    public void outPutKolakoski(int n, int m, int[] array) {        List<Integer> list = new ArrayList<Integer>();        this.addElement(list, array[0], array[0]);        int index = 1, cur = 1;        int times = 0;        //如果输入的第一个元素是1,需要单独处理        if (array[0] == 1 && m > 1) {            this.addElement(list, array[1], array[1]);            index++;            cur = (cur + 1) % m;        }        //index作为list的下标,每次index++        //cur作为输入数组array的下标,每次cur = (cur + 1) % m        while (list.size() < n) {//如果没有上面if的单独处理,此时list只有一个元素1,list.get(1)会报错            times = list.get(index++);            this.addElement(list, times, array[cur]);            cur = (cur + 1) % m;        }        for (int i = 0; i < n; i++) {            System.out.println(list.get(i));        }    }//outPutKolakoski    //list尾部重复添加元素    private void addElement(List<Integer> list, int n, int element) {        for (int i = 0; i < n; i++) {            list.add(element);        }    }//addElement    public static void main(String[] args) {        // write your code here        Scanner sc = new Scanner(System.in);        int n = sc.nextInt();        int m = sc.nextInt();        int[] array = new int[m];        for (int i = 0; i < m; i++) {            array[i] = sc.nextInt();        }        new Main().outPutKolakoski(n, m, array);        sc.close();    }}

C++如下:

#include <cstdio>#include <vector>using namespace std;vector<int> vec;int a[1005];int main() {int n, m;while(~scanf("%d%d", &n, &m)) {for (int i = 0; i < m; ++i)scanf("%d", &a[i]);vec.clear();int idx = 1, cur = 1;vec.reserve(10100);vec.insert(vec.begin(), a[0], a[0]);//在vec首部添加a[0]个a[0]if (a[0] == 1 && m > 1) {vec.insert(vec.end(), a[1], a[1]);//在vec尾部添加a[1]个a[1]++idx; cur = (cur + 1) % m;}while (vec.size() < n) {int times = vec[idx++];vec.insert(vec.end(), times, a[cur]);cur = (cur + 1) % m;}for (int i = 0; i < n; ++i)printf("%d\n", vec[i]);}return 0;}

30 43 1 4 1333111444131444411113333144413

有不明白的请参考我的另外两篇博客

http://blog.csdn.net/u010002184/article/details/77671588

http://blog.csdn.net/u010002184/article/details/77676638











阅读全文
0 0
原创粉丝点击