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