diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml new file mode 100644 index 00000000..0e7dfa9e --- /dev/null +++ b/.github/workflows/c-cpp.yml @@ -0,0 +1,23 @@ +name: C/C++ CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: cppcheck-action + uses: deep5050/cppcheck-action@v2.0.0 + - name: make + run: make + - name: make check + run: make check + - name: make distcheck + run: make distcheck diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..32f9c531 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +all: main sp + +main:main.cpp + $(CXX) main.cpp -o main + +sp:SuperPrime_HW.cpp + $(CXX) SuperPrime_HW.cpp -o sp + $(CXX) SuperPrime_HW2.cpp -o sp + +check: + + +distcheck: diff --git a/SuperPrime.cpp b/SuperPrime.cpp index 44e04a7c..50074af6 100644 --- a/SuperPrime.cpp +++ b/SuperPrime.cpp @@ -1,81 +1,57 @@ -class Number { +#include +#include +class Nature { +private: + int num; public: - Number(int num):mNum(num) { + Nature():num(0){ + std::cout << "Default Create Nature as " << num << std::endl; } - Number(const Number &n):mNum(n.mNum) { + Nature(int n):num(n) { + std::cout << "Create Nature as " << num << std::endl; } - ~Number(); - NumberSet split() { - NumberSet ns; - int n = mNum; - while(n != 0) { - int d = n % 10; - Number dig(d); - ns.add(dig); - n = n / 10; - } - return ns; + Nature(const Nature &nat):num(nat.num){ + std::cout << "Copy Create Nature as " << num << std::endl; } - bool isPrime() { - for(int i = 2; i < mNum; ++i) { - if(mNum % i == 0) - break; - } - if(i != mNum) - return false; - return true; + ~Nature() { + std::cout << "Destroy Nature as " << num << std::endl; } -private: - const int mNum; }; -class NumberSet { +class SuperPrime { private: - Number *nums[20]; - int size; + std::vector natures; public: - NumberSet() { - size = 0; - for(int i = 0; i < 20; ++i) - nums[i] = NULL; - } - ~NumberSet() { - for(int i = 0; i < size; ++i) - delete nums[i]; - } - bool add(const Number &n) { - if(size != 20 && nums[size] == NULL) { - nums[size] = new Number(n); - size += 1; - return true; - } - return false; + SuperPrime(int a, int b) { + std::cout << "Create SuperPrime from " << a << " to " << b << std::endl; + for(int i = a; i < b; i++) { + Nature nat(i); + std::cout << "HAHA" << std::endl; + natures.push_back(nat); + std::cout << "DDDDD" << std::endl; + } } - Number sum() { - Number sum(0); - for(int i = 0; i < size; ++i) { - if(nums[i] != NULL) - sum.add(*(nums[i])); + ~SuperPrime() { + std::cout << "Destroy SuperPrime " << std::endl; + } + + Nature max() { + std::vector::iterate it = natures.begin(); + Nature max(0); + for(; it != natures.end(); it ++) { + if(it->isSuperPrime()) { + if (max.compare(*it)) { + max = *it; + } + } } - return sum; + return max; } }; -class SuperPrime : public Number { -public: - SuperPrime(int num); - ~SuperPrime(); - - bool isPrime(); - - Prime sumBit(); - Prime multiBit(); - Prime sqaureSumBit(); -private: - const int num; -} -int main() -{ - SuperPrime sp(113); - if(sp.isPrime()) { - ; // do something - } -} +int main() { + SuperPrime sp(10, 13); + Nature n = sp.max(); + std::cout << "×î´ó³¬¼¶ËØÊý£º" ; + n.show(); + + return 0; +} diff --git a/SuperPrime2.cpp b/SuperPrime2.cpp index 1f7d28d7..122b6bc8 100644 --- a/SuperPrime2.cpp +++ b/SuperPrime2.cpp @@ -1,124 +1,66 @@ -//×÷Òµ£ºÃæÏò¶ÔÏóÉè¼ÆÒÔÏ¿ò¼ÜµÄ´úÂëϸ½Ú£¬³ÌÐòÄܱàÒëÔËÐеõ½ÕýÈ·½á¹û #include -class Prime { - public: - Prime():number(0) { - } - Prime(int n):number(n) { - } - ~Prime() { - } - bool isPrime() { - //2µ½number-1µÄÒò×Ó - return false; - } - private: - const int number; -}; -class PrimeSet { - public: - PrimeSet(int size) { - //¼¯ºÏµÄ¹¹Ôìʲô£¿ - N = new Prime*[size]; - this->size = size; - index = 0; - } - ~PrimeSet() { - for (int i = 0; i < index; ++i) //Ïú»Ù¶ÔÏó - delete N[i]; - delete[] N; - } - bool add(int n) { - if(index == size) return false; - Prime *p = new Prime(n); - N[index] = p; - index += 1; - return true; - } - bool isAllPrime() { - for(int i = 0; i < index; i++) - if (!N[i]->isPrime()) - return false; - return true; - } - private: - Prime **N; - int size, index; +#include +class Nature { +private: + const int num; //Êý +public: + Nature(int n):num(n) { + } + ~Nature(); + Nature add(Nature sp); //ÇóºÍ + bool compare(Nature sp) { //±È´óС + if(num > sp.num) + return true; + return false; + } + }; + class SuperPrime { - public: - SuperPrime():number(0), pset(3) { //Ϊʲô±ØÐëÓУ¿ - } - SuperPrime(int n):number(n), pset(3) { - split(); //Ëü¾ÍÊǹ¹Ôì¶ÔÏó - } - ~SuperPrime() { - } - bool isSuperPrime() { - //ÔõôʹÓÃpset£¿ - Prime p(number); - if (p.isPrime()) - return true; - return false; - } - private: - const int number; - PrimeSet pset; - void split() { //¹¤³§·½·¨Éè¼ÆÄ£Ê½ - // number split into N - int temp = number; - while(temp > 0) { - int n = temp % 10; - temp /= 10; - pset.add(n); //×÷Òµ£ºµ¥¸öÊý×ÖΪ¶ÔÏ󣿻¹ÊǺÍ/»ý/ƽ·½ºÍΪ¶ÔÏó£¿ - } - } - int sum() { - return 0; - } - int multi() { - return 0; - } - int squareSum() { - return 0; - } -}; -class SuperPrimeSet { - public: - SuperPrimeSet(int from, int to) { - size = to - from; - for (int i = from; i < to; i++) - set[i-from] = new SuperPrime(i); - } - ~SuperPrimeSet() { - for(int i = 0; i < size; i++) - delete set[i]; - } - int count() { - int count = 0; - for (int i = 0; i < size; i++) - if(set[i]->isSuperPrime()) - count += 1; - return count; - } - int sum() { - int sum = 0; - /* - for (int i = 0; i < size; i++) - if(set[i].isSuperPrime()) - sum += set[i]; - */ - return sum; - } - private: - SuperPrime **set; - int size, index; +private: + std::vector range; //³¬¼¶ËØÊýµÄÈÝÆ÷ +public: + SuperPrime(int a, int b) { + for(int i = a; i < b; i++) { + Nature nat(i); + if(nat.isSuperPrime()) //¹ýÂËÆ÷ + range.push_back(nat); + } + } + int max() { + for(std::vector::iterate it = range.begin(); + it != range.end(); it++) { + if(it->compare()) + } + return 0; + } + + int howmany() { + return range.size(); + } + int sum() { + for(std::vector::iterate it = range.begin(); + it != range.end(); it++) { + } + } +private: + void split(int x) { + int a, sum, mult, sqrsum; + while(x != 0) { + a = x % 10; + sum += a; + mult *= a; + sqrsum += a*a; + x = x / 10; + } + } }; -int main() { - SuperPrime sp(113); - if (sp.isSuperPrime()) - std::cout << "113 is SuperPrime" << std::endl; - else - std::cout << "113 is NOT SuperPrime" << std::endl; + +int main() +{ + SuperPrime sp(100, 999); + std::cout << "×î´óµÄ³¬¼¶ËØÊý£º" << sp.max() << std::endl; + std::cout << "³¬¼¶ËØÊý¸öÊý£º" << sp.howmany() << std::endl; + std::cout << "³¬¼¶ËØÊýµÄºÍ£º" << sp.sum() << std::endl; return 0; -} +} diff --git a/SuperPrime_HW.cpp b/SuperPrime_HW.cpp new file mode 100644 index 00000000..0e004b50 --- /dev/null +++ b/SuperPrime_HW.cpp @@ -0,0 +1,5 @@ +#include + +int main() { + return 0; +} diff --git a/SuperPrime_HW2.cpp b/SuperPrime_HW2.cpp new file mode 100644 index 00000000..2c99fb51 --- /dev/null +++ b/SuperPrime_HW2.cpp @@ -0,0 +1,115 @@ +#include +#include +#include +class Nature { +//private: + // int num; +public: + int num; + Nature():num(0){ + std::cout << "Default Create Nature as " << num << std::endl; + } + Nature(int n):num(n) { + std::cout << "Create Nature as " << num << std::endl; + } + Nature(const Nature &nat):num(nat.num){ + std::cout << "Copy Create Nature as " << num << std::endl; + } + ~Nature() { + std::cout << "Destroy Nature as " << num << std::endl; + } + void show(){ + std::cout << num << std::endl; + } + bool isPrime(int sum) { + if(num == 1 || num == 0) + return false; + for(int i = 2; i <= (int)sqrt(num); i++) + { + if(num % i == 0) + return 0; + } + return 1; + } + bool isSuperPrime(int sum){ + int a, b, c; + a = num % 10; + b = (num / 10) % 10; + c = num / 100; + int m , n , t ; + m = a + b + c; + n = a * b * c; + t = a * a + b * b +c * c; + if(isPrime(m) && isPrime(n) && isPrime(t)){ + return 1; + } + return 0; + } + int compare(Nature &nat) { + if (num > nat.num) + return 1; + else if(num == nat.num) + return 0; + + return -1; + } + class SuperPrime; +}; +class SuperPrime : public Nature + +{ +private: + std::vector natures; +public: + + SuperPrime(int a, int b) + { + // cout << "Create SuperPrime from " << a << " to " << b << endl; + for (int i = a; i < b; i++) + + { + + Nature nat(i); + if (nat.isSuperPrime(i)) + {natures.push_back(nat); + std::cout << "SuperPrime£º" << nat.num << std::endl; + } + } + } + + Nature max() { + std::vector::iterator it = natures.begin(); + Nature max(0); + for(; it != natures.end(); it ++) { + if (max.compare(*it)) { + max = *it; + } + } + return max; + } + Nature count(){ + std::vector::iterator it = natures.begin(); + Nature count(0); + for(;it != natures.end(); it++){ + count.num++; + } + return count; + } + Nature sum(){ + std::vector::iterator it = natures.begin(); + Nature sum(0); + for(;it != natures.end(); it++){ + sum.num += it ->num; + } + return sum; + } +}; + +int main() { + SuperPrime sp(10, 13); + Nature n = sp.max(); + std::cout << "��󳬼�������" ; + n.show(); + + return 0; +} diff --git a/main.cpp b/main.cpp index 91307286..fec95e9b 100644 --- a/main.cpp +++ b/main.cpp @@ -1,4 +1,10 @@ -#include "HelloWorld.h" +class HelloWorld { +public: + HelloWorld() { + } + void hello() { + } +}; int main() { HelloWorld hw; hw.hello();