Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 这种逻辑方法适合我的程序吗?_C_Logic - Fatal编程技术网

C 这种逻辑方法适合我的程序吗?

C 这种逻辑方法适合我的程序吗?,c,logic,C,Logic,程序-将矩阵顺时针旋转90度。 我是一名编码初学者。我在Geeksforgek上遇到了这个问题。我发现解决方案非常复杂,所以尝试应用我的逻辑。但我不知道我的逻辑是否适合这个项目。请引导我 #include<stdio.h> int main() { int A = 0 , a = 0 , b = 0; int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; printf("90 Degree rotation: \n");

程序-将矩阵顺时针旋转90度。 我是一名编码初学者。我在Geeksforgek上遇到了这个问题。我发现解决方案非常复杂,所以尝试应用我的逻辑。但我不知道我的逻辑是否适合这个项目。请引导我

#include<stdio.h>
int main()
{
    int  A = 0 , a = 0 , b = 0;
    int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    printf("90 Degree rotation: \n");
    printf("\n");
    for(A = 2; A >= 0; A--)
    {
        for(a = 0; a < 3 ; a++)
        {
            for(b = 0; b < 3 ; b++)
            {
                if(b==A)
                    printf("%d\t",arr[a][b]);
            }
        }
        printf("\n");
    }
}
#包括
int main()
{
int A=0,A=0,b=0;
int arr[3][3]={{1,2,3},{4,5,6},{7,8,9};
printf(“90度旋转:\n”);
printf(“\n”);
对于(A=2;A>=0;A--)
{
对于(a=0;a<3;a++)
{
对于(b=0;b<3;b++)
{
如果(b==A)
printf(“%d\t”,arr[a][b]);
}
}
printf(“\n”);
}
}
输入

1 2 3
4.56
7 8 9

输出

369
2.5.8
14 7


这是您选择的坐标轴的矩阵:

  b ->
a 1 2 3
| 4 5 6
V 7 8 9
也就是说,对于固定的
a
,例如,如果增加
b
,则打印“下一个数字”(前提是
b
不是
2
)。类似地,如果使用相同的
b
增加
a
,则使用相同的列,但使用下一行

因此,您可以使用以下伪程序来打印完整列(在一行上):

你想要什么?您要打印以下内容:

3 6 9
2 5 8
1 4 7
即打印最后一列,然后是中间一列,然后是第一列,这是由以下伪程序完成的:

print the 3rd column of arr
print the 2nd column of arr
print the 1st column of arr
或者,更简洁地说:

for b from 2 to 0
  print the b-th column of arr.
因此,最后的伪代码是(内联print_column过程):

或者,在C中:

for(b = 2; b >= 0 ; b--)
{
    for(a = 0; a < 3 ; a++)
    {
            printf("%d\t",arr[a][b]);
    }
    printf("\n");
}
(b=2;b>=0;b--)的

{
对于(a=0;a<3;a++)
{
printf(“%d\t”,arr[a][b]);
}
printf(“\n”);
}

为什么不直接反转a&b回路,然后放下外部回路?你有1个循环太多了。或者只需打印
arr[b][a]
。好吧,也许你必须反转一些索引,但不应该超过2个循环。关于改进工作代码的问题属于。这是逆时针方向的。
for b from 2 to 0
  for a from 0 to 2
    print arr[a][b]
  print newline
for(b = 2; b >= 0 ; b--)
{
    for(a = 0; a < 3 ; a++)
    {
            printf("%d\t",arr[a][b]);
    }
    printf("\n");
}