課程
/后端開發(fā)
/C
/C語言入門
為什么可以用(i%2==0 && j%2==0)來表示?怎么得到的?
2019-02-16
源自:C語言入門 6-11
正在回答
不好意思,上面給的代碼是錯的,我現(xiàn)在知道問題了。
對角線有主對角線和次對角線,主對角線是 ( i == j ),次對角線是 ( i + j == 矩陣維度 - 1 ),本例中次對角線是 ( i + j == 2 )。
而(i%2==0 && j%2==0)表示的是行號和列號都是偶數(shù)的位置,即下面矩陣為1的位置:
當矩陣維度是3時:
1?0?1 0?1?0 1?0?1
當矩陣維度是4時:
1?0?1?0 0?1?0?1 1?0?1?0 0?1?0?1
當矩陣維度是5時:
1?0?1?0?1 0?1?0?1?0 1?0?1?0?1 0?1?0?1?0
可以發(fā)現(xiàn),當舉證維度是3時,行號和列號都為偶數(shù)的位置正好是主對角線和次對角線,這只是一個巧合,因為當矩陣維度大于3時,他們的位置并不在主對角線線和次對角線上。
附上正確代碼:
#include?<stdio.h>int?main(){ ????int?arr[3][3]?=?{{1,2,3},{4,5,6},{7,8,9}}; ????int?i,j;???? ????int?sum=0;???? ????for(i=0;i<3;i++)???? ????{ ????????for(j=0;j<3;j++)??????? ????????????{???????????? ????????????????if(i==j)sum+=arr[i][j];???????????? ????????????????else?if(i+j==2)sum+=arr[i][j];??????? ????????????}???? ????????}???? ????printf("對角線元素之和是:%d\n",sum);???? ????return?0;???? }
Howard229
藍布閣
Howard229 回復(fù) 藍布閣
對角線條件就倆,1是滿足從左上到右下的對角線,特點是i和j相同,
2是滿足從左下到右上的對角線,特點是i+j等于2,因為i最大時j最小,i每次加1,j每次減1,兩者的和不變
#include <stdio.h>
int main()
{
? ? int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
? ? int i,j;
? ? int sum=0;
? ? for(i=0;i<3;i++)
? ? {
? ? ? ?for(j=0;j<3;j++){
? ? ? ? ? ? if(i == j || i + j == 2){
? ? ? ? ? ? ? ? printf("%d==>%d\n",i,j);
? ? ? ? ? ? ? ? sum +=arr[i][j];
? ? ? ? ? ? }? ?
? ? ? ?}
? ? ? ?
? ? }
? ? printf("對角線元素之和是:%d\n",sum);
? ? return 0;? ??
}
可以觀察對角線元素的下標的特點,一個是行等于列,一個是行加列等于2,所以可以把if()語句寫成這樣:
?if(i?==?j?||?(i?+?j)?==?2)
沒有必要去關(guān)心元素本身的值。
這題對角線是1,5,9和7,5,3? 其中的5只記一次。 編寫的話因為都是奇數(shù)所以用取余
if(arr[i][j]%2!=0)
{sum+=arr[i][j];
? ? ? ? ? ??
無視我的回答吧,我回答得一塌糊涂,是錯的
? ? ? ?for(j=0;j<3;j++)
? ? ? ? ?if(i==j)sum+=arr[i][j];?
? ? printf("對角線元素之和是:%d\n",25);
對角線元素不應(yīng)該是( i == j ) 嗎?有問題來源嗎
舉報
C語言入門視頻教程,帶你進入編程世界的必修課-C語言
1 回答關(guān)于對角線元素之和
3 回答對角線元素
3 回答對角線的條件
2 回答什么是對角線元素
2 回答什么叫對角線元素
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2019-02-16
不好意思,上面給的代碼是錯的,我現(xiàn)在知道問題了。
對角線有主對角線和次對角線,主對角線是 ( i == j ),次對角線是 ( i + j == 矩陣維度 - 1 ),本例中次對角線是 ( i + j == 2 )。
而(i%2==0 && j%2==0)表示的是行號和列號都是偶數(shù)的位置,即下面矩陣為1的位置:
當矩陣維度是3時:
當矩陣維度是4時:
當矩陣維度是5時:
可以發(fā)現(xiàn),當舉證維度是3時,行號和列號都為偶數(shù)的位置正好是主對角線和次對角線,這只是一個巧合,因為當矩陣維度大于3時,他們的位置并不在主對角線線和次對角線上。
附上正確代碼:
2019-04-18
對角線條件就倆,1是滿足從左上到右下的對角線,特點是i和j相同,
2是滿足從左下到右上的對角線,特點是i+j等于2,因為i最大時j最小,i每次加1,j每次減1,兩者的和不變
#include <stdio.h>
int main()
{
? ? int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
? ? int i,j;
? ? int sum=0;
? ? for(i=0;i<3;i++)
? ? {
? ? ? ?for(j=0;j<3;j++){
? ? ? ? ? ? if(i == j || i + j == 2){
? ? ? ? ? ? ? ? printf("%d==>%d\n",i,j);
? ? ? ? ? ? ? ? sum +=arr[i][j];
? ? ? ? ? ? }? ?
? ? ? ?}
? ? ? ?
? ? }
? ? printf("對角線元素之和是:%d\n",sum);
? ? return 0;? ??
}
2019-02-22
可以觀察對角線元素的下標的特點,一個是行等于列,一個是行加列等于2,所以可以把if()語句寫成這樣:
沒有必要去關(guān)心元素本身的值。
2019-02-21
這題對角線是1,5,9和7,5,3? 其中的5只記一次。 編寫的話因為都是奇數(shù)所以用取余
if(arr[i][j]%2!=0)
{sum+=arr[i][j];
? ? ? ? ? ??
2019-02-16
無視我的回答吧,我回答得一塌糊涂,是錯的
2019-02-16
附上正確代碼:
#include <stdio.h>
int main()
{
? ? int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
? ? int i,j;
? ? int sum=0;
? ? for(i=0;i<3;i++)
? ? {
? ? ? ?for(j=0;j<3;j++)
? ? ? ? ?if(i==j)sum+=arr[i][j];?
? ? }
? ? printf("對角線元素之和是:%d\n",25);
? ? return 0;? ??
}
2019-02-16
對角線元素不應(yīng)該是( i == j ) 嗎?有問題來源嗎