码迷,mamicode.com
首页 > 其他好文 > 详细

找规律

时间:2014-09-14 22:05:47      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   for   div   问题   sp   

1 3
1 1 1 3
3 1 1 3
1 3 2 1 1 3
1 1 1 3 1 2 2 1 1 3
3 1 1 3 1 1 2 2 2 1 1 3
……

一行有1个1,1个3,所以第二行为1 1 1 3,第二行有3个1和1个3,所以第三行为3 1 1 3。

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<stdlib.h>
using namespace std;
void creatNumbers(int *a,int num,int rows)  //num为第一行的长度
{
    int (*b)[100] = new int[rows][100];
    memset(b,0,sizeof(int)*rows*100);

    int length = num;  //length为为一行的长度
    int curRow = 0;
    int count; //count表示每一行中相同元素的个数
    int value[100] = {0}; //存储每一行中每组相同元素的值
    int cnt = 1; //每一行中的组数
    int cntNum[100] = {0};  //存储每一行中的组数

    for(int i=0; i<num; i++)          //打印第一行
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;

    for(int i=0; i<num; i++)
    {
        b[curRow][i] = a[i];
    }

    while(--rows)
    {   count = 1;
        for(int i=0; i < length; i++)
        {

            if( i < length-1)
            {
                if(b[curRow][i] == b[curRow][i+1])
                {
                    count++;
                }
                else
                {
                    cnt++;
                    value[cnt-2] = b[curRow][i];
                    cntNum[cnt-2] = count;
                    count = 1;       //当前数字和后一个数字不同时,重置count为1
                }
            }
            else
            {
                if(b[curRow][i] == b[curRow][i-1])
                {
                    cntNum[cnt-2]++;
                }
                else
                {
                    cnt++;
                    value[cnt-2] = b[curRow][i];
                    cntNum[cnt-2] = 1;
                }
            }

        }
        length = 2*(cnt-1);   //实际组数是cnt-1,故下一组的长度是2*(cnt-1)
        curRow++;
        for(int j=0; j<cnt-1; j++)       //对下一行进行赋值
        {
            int m = 2*j;
            b[curRow][m] = cntNum[j];
            b[curRow][m+1] = value[j];

        }
        for(int i = 0;b[curRow][i]!=0; i++)   //打印
        {
            cout<<b[curRow][i]<<" ";
        }
        printf("\n");
        cnt = 1;  //重置组数
        memset(value,0,sizeof(int)*100); //重置value和cntNum数组
        memset(cntNum,0,sizeof(int)*100);
    }
}
int main()
{
    int a[]= {1,3};
    creatNumbers(a,2,7);
    return 0;
}

虽然能解决这个问题,但这又很大的局限性,只能针对第一行为两个不同的数,如果第一行是一个或除二以外的其他数,都会出现错误输出~~哪个大神能修改一下呢,让它功能更强大呢

找规律

标签:style   blog   color   io   os   for   div   问题   sp   

原文地址:http://www.cnblogs.com/ziquan/p/3971734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!