八达网

标题: 编程达人帮我看道题。。。。 [打印本页]

作者: 琴瑟琵琶    时间: 2011-2-1 18:29
标题: 编程达人帮我看道题。。。。
请看下面有规律的数字循环
# 1
# 11
# 21
# 1211
# 111221
# 312211
# 13112221
# 1113213211

就是说当前看到是什么数字就把它累计到下一个不同的数字,然后输出当前累计数和数字

比如第五行是一个1,一个2,两个1...正好是第四行的内容

现在需要编一个程序,说出某一行的值是多少

比如

give number: 3
result: 21

give number: 7
result: 13112221

程序可以用C++写,不过最好用java,下面有模板

import java.util.Scanner;

public class FunnyNumbers {
    static Scanner reader = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.print("give number: ");
        int n = reader.nextInt();
        System.out.println( "result "+makenumber(n) );
    }

    public static String makenumber(int number) {
        // write ur code here
            return "";
    }
}

作者: Bookends    时间: 2011-2-1 18:31
前一阵不是php吗?

现在又java了?
作者: 琴瑟琵琶    时间: 2011-2-1 18:32
前一阵不是php吗?

现在又java了?
Bookends 发表于 2011-2-1 12:31

最近在研究算法啊
作者: 琴瑟琵琶    时间: 2011-2-1 18:32
这个题的算法叫LookAndSay

http://rosettacode.org/wiki/Look-and-say_sequence#Java
作者: anomaly    时间: 2011-2-1 18:46
这也叫算法题, 文盲笑笑路过
作者: 越睡越困    时间: 2011-2-1 18:47
题目都没看懂啊我
作者: 琴瑟琵琶    时间: 2011-2-1 18:52
这也叫算法题, 文盲笑笑路过
anomaly 发表于 2011-2-1 12:46

当然啊,O(n)肯定比O(n2)好很多啊
作者: 羊羊羊    时间: 2011-2-1 18:52
我也没看懂题目。
作者: 琴瑟琵琶    时间: 2011-2-1 18:53
8daer智商太低,哥看到这几个数字一下子就找到规律了
作者: 肥熊大BB    时间: 2011-2-1 18:58
找到规律了就能写出来了啊~
作者: 琴瑟琵琶    时间: 2011-2-1 19:01
找到规律了就能写出来了啊~
肥熊大BB 发表于 2011-2-1 12:58

问题是不会写啊= ="
作者: 越睡越困    时间: 2011-2-1 19:23
An example:

    * Starting with the number 1, you have one 1 which produces 11.
    * Starting with 11, you have two 1's i.e. 21
    * Starting with 21, you have one 2, then one 1 i.e. (12)(11) which becomes 1211
    * Starting with 1211 you have one 1, one 2, then two 1's i.e. (11)(12)(21) which becomes 111221


贴这一段估计就都能看懂题目了
作者: OruA    时间: 2011-2-1 19:24
写几个具体应用比研究这些有用多了
作者: 琴瑟琵琶    时间: 2011-2-1 19:25
写几个具体应用比研究这些有用多了
OruA 发表于 2011-2-1 13:24


说风凉话的Orua大大!!
作者: zhaoyun123    时间: 2011-2-1 19:25

作者: 越睡越困    时间: 2011-2-1 19:27
话说那个网址不是都有源码了么
作者: 琴瑟琵琶    时间: 2011-2-1 19:30
话说那个网址不是都有源码了么
越睡越困 发表于 2011-2-1 13:27

程序稍微有点不一样,不会改啊
作者: fool    时间: 2011-2-1 19:33
http://www.google.com/search?q=L ... illa:zh-CN
作者: 越睡越困    时间: 2011-2-1 19:34
这。。。我帮你改改
作者: 越睡越困    时间: 2011-2-1 19:39
哦 。LZ那个格式比较麻烦啊   要在一个函数里面写完

不然的话可以另外建一个函数,然后再在LZ那个格式里面写个for循环调用

哎 可惜我没时间啊 我要出门了。。
作者: 越睡越困    时间: 2011-2-1 19:54
import java.util.Scanner;

public class funny {
    static Scanner reader = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.print("give number: ");
        int n = reader.nextInt();
        System.out.println( "result "+makenumber(n) );
    }

    public static String makenumber(int number) {
            String num = "1";
             
            for (int i=1;i<=number;i++) {
                    System.out.println(num);
                     
                    StringBuilder result= new StringBuilder();
                     
                    char repeat= num.charAt(0);
                    num= num.substring(1) + " ";
                    int times= 1;
             
                    for(char actual: num.toCharArray()){
                            if(actual != repeat){
                                    result.append(times + "" + repeat);
                                    times= 1;
                                    repeat= actual;
                            }else{
                                    times+= 1;
                            }
                    }
                    num=result.toString();
            }
            return num;
    }
}
作者: SimoN    时间: 2011-2-1 19:54

作者: 大家好    时间: 2011-2-1 19:59

作者: 琴瑟琵琶    时间: 2011-2-1 20:07
21楼V5
作者: 琴瑟琵琶    时间: 2011-2-1 20:11
给了你1000水晶
作者: 1000    时间: 2011-2-1 20:25
不懂啊
作者: hkkhhk    时间: 2011-2-1 21:04
Date: Mon, 5 Mar 2007 21:21:24 -0300
From: Paulo Ortolan (paulo.ortolan(AT)gmail.com)

Java Code for A005150

*public class DescribePrevious {
    public static void main(String[] args) {
        char[] cSeq = new char[] {'1'};
        char s = 0;
        int count = 0;
        String newSeq = "";

        System.out.println(new String(cSeq));

        for(int i = 0; i < 20; i++) {
            for(int j = 0; j < cSeq.length; j++) {
                if(j == 0) {
                    s = cSeq[j];
                    count++;
                } else {
                    if(s == cSeq[j]) {
                        count++;
                    } else {
                        newSeq += count + "" + s;
                        count = 1;
                        s = cSeq[j];
                    }
                }
            }

            newSeq += count + "" + s;
            System.out.println(newSeq);
            cSeq = newSeq.toCharArray();
            newSeq = "";
            count = 0;
        }
    }
}

--
Paulo Henrique Ortolan
Java Developer
作者: hkkhhk    时间: 2011-2-1 21:04
http://oeis.org/A005150
作者: 1000    时间: 2011-2-1 21:05
学习了
作者: Neutrino    时间: 2011-2-1 22:02
atoi(),应该用这个吧
作者: nttstar    时间: 2011-2-1 22:29
这种题目都不会还是退学吧
作者: zerg王    时间: 2011-2-1 22:32
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

string getnextnumber(string number)
{
        string rs;
        int count = 0;
        string::iterator it = number.begin(), ia = it;
        for(; it != number.end(); it++)
        {
                if(*it == *ia)
                        ++count;
                else
                {
                        ostringstream s1;
                        ostringstream s2;
                        s1 << count;
                        rs += s1.str();
                        s2 << *ia;
                        rs += s2.str();
                        ia = it;
                        count = 1;
                }       
        }
        ostringstream s1;
        ostringstream s2;
        s1 << count;
        rs += s1.str();
        s2 << *ia;
        rs += s2.str();

        return rs;

}

string makenumber(int n)
{
        string rs("1");
        for(int i = 0; i < n - 1; i++)
        {
                rs = getnextnumber(rs);
        }
    return rs;
}

int main()
{
        cout << makenumber(8) << endl;

        return 0;
}
作者: zerg王    时间: 2011-2-1 22:33
晕能给我500水晶么,8王。
作者: zerg王    时间: 2011-2-1 23:27
靠,看了标准答案,羞愧飘过,标准答案是O(n),俺的是O(n^2)
作者: zerg王    时间: 2011-2-1 23:29
晕,貌似标准的也是O(n^2)
作者: 琴瑟琵琶    时间: 2011-2-1 23:33
这种题目都不会还是退学吧
nttstar 发表于 2011-2-1 16:29

.................
作者: 越睡越困    时间: 2011-2-2 00:29
哎 罪过 我java考试都挂了。。随便写写而已。。




欢迎光临 八达网 (https://www.8-da.com/) Powered by Discuz! X2.5