今日c++练手之寻找n个连续的合数
生活随笔
收集整理的這篇文章主要介紹了
今日c++练手之寻找n个连续的合数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
算法的關鍵在于如何尋找連續的合數重點在連續,所以需要有標志位。只有連續的n個數都是合數才可以退出這個循環。并且找的這個數組每檢測n個數都要重新開始計算。具體代碼如下
#include<iostream> using namespace std; class noprime {int n;int *p;public:noprime(int n1){n=n1;p=new int[n1];}int yes(int x){for(int i=2;i<x/2;i++)if(x%i==0)return 1;return 0;}void search();void print(){for(int i=0;i<n;i++)cout<<p[i]<<'\t';cout<<endl;}~noprime(){if(p)delete[]p;}} ;void noprime::search()//算法的關鍵部分與yes函數結合使用{int i,j,t=1;for(i=3;t=1;i++){// t=1;for(j=i;j<i+n;j++){p[j-i]=j;if(yes(j)==0)t=0;}if(t==1)break;}}int main(){noprime num(20);num.search();num.print();return 0;}此程序包含的一個知識點:析構函數
析構函數是執行與構造函數相反的操作:釋放對象使用的資源,并銷毀非static成員。
析構函數的特點:
1.函數名是在類名前加上~,無參數且無返回值。
2.一個類只能有且有一個析構函數,如果沒有顯式的定義,系統會生成一個缺省的析構函數(合成析構函數)。
3.析構函數不能重載。每有一次構造函數的調用就會有一次析構函數的調用。
此程序構造函數成員中有動態開辟的指針成員,在析構函數中對它進行了delete,如果不顯式的定義拷貝構造函數,當你這樣:noprime num2(num1)來創建num2時,因為默認的拷貝構造函數是淺拷貝,這樣做的結果會使num2的成員p和num1的p是指向同一塊空間,在調用析構函數的時候會導致用一塊空間被釋放兩次,程序會崩潰。
總結
以上是生活随笔為你收集整理的今日c++练手之寻找n个连续的合数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab中size、length、c
- 下一篇: quartus管脚分配后需要保存吗_嵌入