一、打印上三角

输入整数N(0 < N <= 100)
输出如下的上三角矩阵

例如:
输入
3
输出:
1 3 6
2 5
4

输入
5
输出:
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11

1、思路

观察输出,对于每行来说,行中的元素直接的差是以1递增的,例如例子2中的第一行,1 3差了2,3 6差了3,以此类推。
列方向来看,看第一列的元素,也是元素直接的差以1递增。
所以基本思路就是两层循环,按照行来打印。

2、代码

  1. void generateRectangle(int num) {
  2. int colDiff = 1; // 第一列元素差,每行结束以后加1,初始值为1
  3. int rowDiff = 2; // 每行第1个元素和第2个元素的差,每行结束以后加1,初始值是2
  4. int rowStart = 1; // 每行第一个元素,每行结束后加colDiff
  5. int cur = 1; // 当前要输出的值
  6. for (int i = 1; i <= num; ++i) {
  7. cur = rowStart;
  8. int curRowDiff = rowDiff; // 当前行的差距
  9. // 开始打印第i行
  10. for (int j = 1; j <= num - i + 1; ++j) {
  11. cout << cur << " ";
  12. cur += curRowDiff;
  13. curRowDiff += 1; // 行内元素的差递增1
  14. }
  15. rowStart += colDiff; // 下一行的起始
  16. rowDiff += 1; // 下一行起始的差距
  17. colDiff += 1; // 上下行的差距
  18. cout << endl;
  19. }
  20. }
  21. int main(){
  22. int n = 0;
  23. cin >> n;
  24. generateRectangle(n);
  25. return 0;
  26. }

二、实现strcpy函数

函数原型:

/*
* dest:目标地址
* src: 源地址
* 返回复制后的地址
*/
char * mystrcpy(char *dest, const char *src);

1、思路

思路比较清晰,就是把字符串中的字符挨个放到目标字符串里,最后在末尾加上’\0’即可

2、代码

char * mystrcpy(char *dest, const char *src)
{
    // 确保都不为空
    assert((dest != NULL) && (src != NULL));
    char *address = dest;
    while (*src != '\0') {
        *dest = *src;
        dest++;
        src++;
    }
    dest = '\0';
    return address;
}