/*
题目要求:给定一个整型数组,要求按照以下给定例子,写出打印函数。
数组:arr[1]={1};
打印结果:
1
数组:arr[2]={1,2};
打印结果:
1 2
12
数组:arr[3]={1,2,3};
打印结果:
1 2 3
12 23
123
数组:arr[4]={1,2,3,4};
打印结果:
1 2 3 4
12 23 34
123 234
1234
数组:arr[6]={1,2,3,4,5,6};
打印结果:
1 2 3 4 5 6
12 23 34 45 56
123 234 345 456
1234 2345 3456
12345 23456
123456
说明:
上例中第五行,12345是第五行得第一块。故,第n行每块中得数据元素得个数就有n个元素。
*/
void PrintArrSpecially(int *arr, int n)
{
assert(NULL != arr && n > 0);
int Row = 1;//代表当前在第几行
int Count = 0;//目前打印了几个数字
int i;
do
{
for (i = 0; i < n; i++)
{
printf("%d", arr[i]); Count++;//目前已经打印了Count个数据
if (i == n - 1)break;//一旦打印到最后一个元素就退出for循环表示此行打印结束
if (Row == Count)//第n行,每块的元素的个数就是行数。故在这个条件下做出相应的操作
{
printf("\t");//打印制表符,输出的结果更加清晰
Count = 0;//恢复当前块打印的个数为0
if (Row > 1)i = i - (Row - 1);//如果不是第一行那么就得移动下次块开始得位置,注意:for循环体完毕之后i还要加1
}
}
printf("\n");
Count = 0;//每行结束时直接跳出了for循环,所以我们再给Count置0
Row++;//每次打印完一行,行数加1
} while (Row <= n);
}
测试用例:
int arr1[7] = { 1,2,3,4,5,6,7};
PrintArrSpecially(arr1, 1);
printf("**************************\n");
PrintArrSpecially(arr1, 3);
printf("**************************\n");
PrintArrSpecially(arr1, 4);
printf("**************************\n");
PrintArrSpecially(arr1, 6);
printf("**************************\n");
结果: