一、打印上三角
输入整数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、代码
void generateRectangle(int num) {int colDiff = 1; // 第一列元素差,每行结束以后加1,初始值为1int rowDiff = 2; // 每行第1个元素和第2个元素的差,每行结束以后加1,初始值是2int rowStart = 1; // 每行第一个元素,每行结束后加colDiffint cur = 1; // 当前要输出的值for (int i = 1; i <= num; ++i) {cur = rowStart;int curRowDiff = rowDiff; // 当前行的差距// 开始打印第i行for (int j = 1; j <= num - i + 1; ++j) {cout << cur << " ";cur += curRowDiff;curRowDiff += 1; // 行内元素的差递增1}rowStart += colDiff; // 下一行的起始rowDiff += 1; // 下一行起始的差距colDiff += 1; // 上下行的差距cout << endl;}}int main(){int n = 0;cin >> n;generateRectangle(n);return 0;}
二、实现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;
}
