国产成人AV一区二区三区在线_国产成人精品无码免费看_国产成人无码无卡在线观看_国产精品成人A区在线观看_国产日韩精品欧美一区_国产亚洲精品自在久久蜜TV_久草热久草热线频97精品_久久久噜噜噜久久中文福利_久久婷婷五月综合色国产免费观看_日日狠狠久久偷偷色综合0,九一桃色在线观看,久久97精品久久久久久久不卡,国产成人精品亚洲精品

大家?guī)兔纯闯绦蚰睦镥e了,?(C++)

訪客2023-11-14 18:59:3410

題目描述:在一個n行m列的矩陣王國中,生活著一些整數,,其中一些是素數,,一些不是素數。如果一個素數的上下左右,、左上,、右上、左下,、右下相鄰的數中都沒有素數,,我們就認為這是一個孤獨的素數,。比如:一個3行5列的矩陣如下。38 10 9 56 1024 138 8 9 6 3這個矩陣中有2個素數,,分別是第1行第1列的3,和第2行第3列的2,。請編程計算出,一個n行m列的矩陣中有多少個孤獨的素數,?輸入:第1行有2個整數n和m,,代表矩陣的大小(3<=n,m<=50)接下來n行,,每行有m個整數(這些整數是1~1000之間的整數,,含1和1000)輸出:輸出1個整數,代表矩陣中孤獨素數的個數,。樣例:輸入3 53 8 10 9 56 10 2 4 138 8 9 6 3輸出2代碼:#include<bits/stdc++.h>using namespace std;int main(){ int n,m,i,j,k;bool b[55][55];int a[55][55],s=0; cin>>n>>m; for(i=1;i<=n;i++) for(j=1;j<=m;j++){ cin>>a[i][j]; b[i][j]=true;} for(i=1;i<=n;i++) for(j=1;j<=m;j++){if(a[i][j]==2||a[i][j]==3){b[i][j]=true;continue;}if(a[i][j]%2==0){b[i][j]=false;continue;} for(k=2;k<a[i][j];k++) if(a[i][j]%k==0){ b[i][j]=false; break;}}for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(b[i][j]==true&&b[i-1][j-1]==false&&b[i-1][j]==false&&b[i-1][j+1]==false&&b[i][j-1]==false&&b[i][j+1]==false&&b[i+1][j-1]==false&&b[i+1][j]==false&&b[i+1][j+1]==false) s++;cout<<s<<endl; return 0;}

你的錯很明顯 ,,是個邊界問題

你的bool b[55][55];沒有完全初始化,雖然在第一循環(huán)中,,b[i][j]=true ;但你的i,j都是從1開始的

b[0][...]及b[...][0]沒有初始化,,它可能是true的(是個隨機值)

這樣當i,j為1時, b[i-1][j-1] 它的值就是true,你例樣中的第一個數值3的結果就不對了

所以要改

bool b[55][55];

bool b[55][55]={0};

若直接將它定義成全局的或靜態(tài)的(C++對全局變量會清0的)

另外,,你程序中的

if(a[i][j]==2||a[i][j]==3) {b[i][j]=true;continue;}if(a[i][j]%2==0) {b[i][j]=false;continue;}

這一大段看上去是多余的,,首先b[1..n][1..m]本身已為true ,就沒必要在2/3時重新設為true了,其次,,你后面if(a[i][j]%k==0) 中,,k本身就從2開始的,所以也沒有必要單獨判if(a[i][j]%2==0)了

文章評論