我想编写一个C程序来读取任何五个int输入,如A B C D E
和输出
A-B, A-C, A-D, A-E
B-C, B-D, B-E
C-D, C-E
D-E
-
是使用减号运算符,尽可能使用短代码。
所以我不想做循环迭代。
int i,j,a[5]={'\0'};
scanf("%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4]);
for(int i=0;i<4;i++)
for(int j=i+1;j<5;j++)
printf("%d\n",a[i]-a[j]);
答案 0 :(得分:0)
尝试这个逻辑:
#include <stdio.h>
int func(int *a, int i, int j)
{
if (j == 4)
return 0;
int tmp = 0;
while(j != i)
{
int tmp2 = 0;
tmp2 = a[j]-a[tmp+j+1];
printf("%d\n", tmp2);
i--;
tmp++;
}
printf("\n");
func(a, 4, j+1);
}
int main()
{
int arr[5]={'\0'};
int i;
int j = 0;
for(i=0; i<5;i++)
{
scanf("%d",&arr[i]);
}
func(arr, i-1, j);
}
我试图避免使用循环,使用递归完成相同的程序。
下面还列出了程序的输出,
Input: Enter 5 number 1 2 3 4 5
Output : -1 -2 -3 -4 -1 -2 -3 -1 -2 -1
答案 1 :(得分:0)
仅用于递归,你可以这样做
#include<stdio.h>
int Recursion1(int *a1, int i, int j)
{
if(j <= 4)
{
printf("%d\n", a1[i] - a1[j]);
Recursion1( a1, i, j+1);
}
return 0;
}
int Recursion(int *a1, int i, int j)
{
if ( i <= 3 && j <= 4)
{
Recursion1(a1, i, j);
Recursion(a1, i + 1, j + 1);
}
return 0;
}
int main()
{
int a[5];
printf("Enter five integer Value = ");
scanf("%d %d %d %d %d", &a[0], &a[1], &a[2], &a[3], &a[4]);
printf("Output is:\n");
Recursion(a, 0, 1);
}
代码的输出是:
Enter five integer Value = 1
2
3
4
5
Output is:
-1
-2
-3
-4
-1
-2
-3
-1
-2
-1
答案 2 :(得分:0)
尝试此逻辑:这会使用递归生成您想要的结果。
#include<stdio.h>
void recursion(int* array,int i,int j,int size)
{
if(i < size-1)
{
if(j < size )
{
printf("%d\t",(array[i]-array[j]));
j++;
recursion(array,i,j,size);
}
else{
printf("\n");
i++;
j=i+1;
recursion(array,i,j,size);
}
}
}
int main()
{
int i=0,j=i+1;
int array[5]={2,3,4,7,8};
recursion(array,i,j,5);
return 0;
}
输出:
-1 -2 -5 -6
-1 -4 -5
-3 -4
-1
答案 3 :(得分:0)
要递归地解决这个问题,首先你必须从问题本身的角度考虑问题。
列表(数组)由 head 和 tail 组成。
1 2 3 4 5
^ ^
H T
或
Head: 1, 2, 3, 4, 5
Tail: 2, 3, 4, 5
输出结果:
取出列表头部的第一个元素,并从中减去列表尾部的第一个元素。输出结果。
输出第一行:
然后,您可以获得如何输出结果的解决方案,您可以重复使用该结果输出行上的其他值。只需使用相同的头部再次调用例程,但尾部会沿着一个元素逐步调整。
1 2 3 4 5
^ ^
H T
或
Head: 1, 2, 3, 4, 5
Tail: 3, 4, 5
递归,直到没有留下尾巴。然后输出换行符,因为我们知道该行已完成。
输出其他行:
重复使用解决方案来执行第一行,但是使用较短的列表可以通过将一个元素与头部一起进一步加载。
1 2 3 4 5
^ ^
H T
或
Head: 2, 3, 4, 5
Tail: 3, 4, 5
...并且在我们不能再做之前做所有这些,因为列表不再有足够的尾部元素。
在代码中:
#include <stdio.h>
void doit(int *head, int headlen, int *tail, int taillen)
{
if (taillen > 0) {
printf("%d ", head[0] - tail[0]);
doit(head, headlen, tail + 1, taillen - 1);
}
else {
putchar('\n');
if (headlen > 2) {
doit(head + 1, headlen - 1, head + 2, headlen - 2);
}
}
}
int main(void)
{
const int nelem = 10;
int array[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
doit(array, nelem, array + 1, nelem - 1);
return 0;
}
运行它:
$ ./a.out
-1 -2 -3 -4 -5 -6 -7 -8 -9
-1 -2 -3 -4 -5 -6 -7 -8
-1 -2 -3 -4 -5 -6 -7
-1 -2 -3 -4 -5 -6
-1 -2 -3 -4 -5
-1 -2 -3 -4
-1 -2 -3
-1 -2
-1