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
- Kolakoski序列--输入任意数,输出前n个数
- Kolakoski序列--输出1,2的前n个数
- 任意前n个数求和
- 组合问题:输出从m个数中的任意抽取n个数的组合全部可能序列
- 输入n个数,输出第k大个数
- 输入整数n,输出斐波那契数列中的前n个数
- 输入两个数m,n,输出m个数,每个数都在[0,n)之间。
- 【C语言小练习】 任意输入N个数,输出其由大到小的数据。
- 输入n个数,分别将这些数从大到小排列输出和从小到大排列输出
- C++输出前n个数中的素数
- 输入N个数到数组中,输出所有大于N个数平均值的数(c编程题)
- 输入n个数和输出调整后的n个数
- 输入n个数和输出调整后的n个数
- 任意输入三个数,输出从小到大排列
- 输入n个数,输出比平均值大的数(数组)
- 输入n,然后输入n个数,使它升序输出
- 用Java实现单链表---输入n个数,用单链表(任意算法)对其进行排序并按从小到大顺序输出。
- C语言输入十个数,任意相邻的两个数不同,输出所有的递增,递减序列
- Python多进程——fork()
- sql语句执行过程详解
- 如何屏蔽双击选中文本
- iOS 11 : CORE ML—浅析
- x-window简介
- Kolakoski序列--输入任意数,输出前n个数
- linux修改hosts
- 数据共享及进程池和回调函数
- 机器学习中的数学(5)——拉格朗日乘子法和KKT条件
- Developing Apps on the OpenDaylight controller的问题
- Java 编程思想(七) BIO/NIO/AIO的区别(Reactor和Proactor的区别)
- iOS 音视频采集与编码
- ZOJ 3424 Rescue(和式变形递推公式降低复杂度)
- POJ 3461 Oulipo(KMP模板题)