给定以下问题:给定一个 N 阶整数方阵 A,其中 N 是给定的自然数。如果矩阵 A 中有一行,其所有元素都是双倍奇数,则显示消息“是”,否则显示消息“否”。
这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <Math.h>
#include <locale.h>
#define size 100
int main(void) {
setlocale(LC_ALL, "Rus");
int i,j,n;
int array[size][size];
int x,y=0;
printf("Введите порядок n: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("Введите %d элемент массива: ",++x);
scanf("%d",&array[i][j]);
if (array[i][j]%2==0 && array[i][j]%4 != 0)
{
y++;
}
}
}
for(i=0;i<n;i++)
{
for ( j = 0; j < n; j++ )
{
printf( "%d \t", array[i][j] );
}
printf( "\n" );
}
if(y>0)
{
printf("Да");
}
else
{
printf("Нет");
}
getch();
return 0;
}
在我的代码中,它的工作方式是,如果整个矩阵中至少有一个元素与问题的条件匹配,那么它会向我显示“是”。问题是我不知道如何检查整个字符串,而不仅仅是一个元素。
这是一个带有两个布尔变量的正面解决方案:
阅读我对代码的评论,其中的逻辑应该很清楚。我也会在这里解释我是如何推理的。因此,您使用计数器在循环中迭代每一行的元素
j(并且带有计数器的循环迭代i行本身)。我决定我应该走另一条路。也就是说,提前接受该行的元素满足条件,然后,如果事实并非如此,则更改负责此的变量。底线是,当通过线时,我们检查每个元素是否满足条件,如果不满足,则将整条线识别为不满足条件。如果字符串的每个元素都满足条件,那么负责这个(elementFound)的变量就不会改变,那么我们可以假设已经找到了想要的字符串:stringFound = true;。PS我也请你注意我关于初始化的评论
x,因为。没有这个,变量最初将有一个未定义的值。这也让人怀疑你声明了一个固定大小的数组,无论你n输入什么。在这种情况下,如果输入n < size,会浪费额外的内存,如果输入 ,n > size则会超出数组的边界,程序会崩溃。最好使用动态数组并将其声明n为n,而不是更多或更少。PPS 我对这个问题的解决方案并不假装优雅。我确信它可以用更短更优雅的方式解决,但不幸的是我没有时间好好考虑它。