编写程序,输出如下形式的数值: 1 -2 -2 3 3 3 -4 -4 -4 -4
时间: 2024-10-08 14:17:33 浏览: 11
这里提供两种解法,一种是递归算法,另一种是循环算法。
递归算法:
引用[3]中的递归算法可以用来解决这个问题。我们可以将这个数列分为两个部分,正数和负数。正数的值都为它们所在位置的数,负数的值为它们所在位置的负数。
定义一个递归函数`Display_Rec3(int n)`,当n为1时输出1,当n为奇数时输出n和-n,当n为偶数时先输出-n,再递归调用Display_Rec3(n-1),最后再输出n。
循环算法:
引用[2]中的循环算法可以用来解决这个问题。我们需要从1开始到n,判断当前位置i是否为偶数。如果是,则先输出i个-i,再输出i个i;如果不是,则先输出i个i,再输出i个-i。
下面分别给出递归算法和循环算法的代码:
递归算法:
```
#include <stdio.h>
void Display_Rec3(int n) {
if(n == 1) {
printf("1 ");
}
else if(n % 2 == 1) {
Display_Rec3(n-1);
printf("%d -%d ", n, n);
}
else {
printf("-%d ", n);
Display_Rec3(n-1);
printf("%d ", n);
}
}
int main() {
Display_Rec3(5);
return 0;
}
```
循环算法:
```
#include <stdio.h>
void Display_Loop(int n) {
int i, j;
for(i=1; i<=n; i++) {
if(i % 2 == 0) {
for(j=1; j<=i; j++) {
printf("-%d ", i);
}
for(j=1; j<=i; j++) {
printf("%d ", i);
}
}
else {
for(j=1; j<=i; j++) {
printf("%d ", i);
}
for(j=1; j<=i; j++) {
printf("-%d ", i);
}
}
}
}
int main() {
Display_Loop(5);
return 0;
}
```
--相关问题--:
阅读全文