首页 > 代码库 > 找规律

找规律

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;}

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

找规律