#include <iostream>
using namespace std;
int main()
{
long long int A,hour,mintue,second;
while(cin>>A)
{
second=A%60;
A/=60;
mintue=A%60;
A/=60;
hour=A;
cout << hour << " hours " << mintue << " mintues and " << second << " seconds" << endl;
}
return 0;
}
2020年4月29日 星期三
0102-ComputeHMS
0101-ComputSQRT
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double n,r,guess,pre_guess;
while(cin>>n)
{
guess=n/2;
do{
r=n/guess;
pre_guess=guess;
guess=(guess+r)/2;
}while(pre_guess-guess>=0.01);
cout << fixed << setprecision(2) << guess << endl;
}
return 0;
}
2020年4月6日 星期一
4.3-Greatest_Common_Divisor_Lab
程式碼:
#include <iostream>
using namespace std;
int gcd(int a, int b)
{
while ((a %= b) != 0 && (b %= a) != 0);
return a + b;
}
int main() {
int a, b;
while (cin >> a >> b)
{
cout << gcd(a, b) << endl;
}
return 0;
}
4.2-BankAccount-Lab
程式碼:
main.cpp
BankAccount.h
BankAccount.cpp
main.cpp
#include <iostream>
#include "BankAccount.h"
using namespace std;
int main() {
BankAccount bankAccount1(200), bankAccount2, bankAccount3(-100);
cout << BankAccount::getAllMoneyInBank() << endl;
bankAccount1.withdraw(100);
cout << bankAccount1.getBalance() << endl;
cout << BankAccount::getAllMoneyInBank() << endl;
bankAccount2.save(50);
cout << bankAccount2.getBalance() << endl;
cout << BankAccount::getAllMoneyInBank() << endl;
return 0;
}
BankAccount.h
#pragma once
class BankAccount {
private:
int balance;
static int total;
public:
BankAccount()
{
balance = 0;
}
BankAccount(int input)
{
balance = input;
total += input;
}
void withdraw(int output);
void save(int input);
int getBalance() { return balance; }
static int getAllMoneyInBank() { return total; }
};
BankAccount.cpp
#include"BankAccount.h"
int BankAccount::total = 0;
void BankAccount::withdraw(int output)
{
balance -= output;
total -= output;
}
void BankAccount::save(int input)
{
balance += input;
total += input;
}
4.1-Collatz_Conjecture-Lab
解題心得:
典型的3N+1問題。
程式碼:
典型的3N+1問題。
程式碼:
#include <iostream>
using namespace std;
int main() {
int a, b;
while (cin >> a >> b)
{
int maxCycleLength = 0, cycleLength = 0, n;
cout << a << " " << b << " ";
if (a > b)
swap(a, b);
for (int i = a; i <= b; i++)
{
n = i;
cycleLength = 1;
while (n != 1)
{
if (n % 2) // even
n = 3 * n + 1;
else //odd
n = n / 2;
cycleLength++;
}
maxCycleLength = cycleLength > maxCycleLength ? cycleLength : maxCycleLength;
}
cout << maxCycleLength << endl;
}
return 0;
}
4.2-Fraction
程式碼:
main.cpp
Fraction.h
Fraction.h
main.cpp
#include <iostream>
#include "Fraction.h"
using namespace std;
int main()
{
Fraction f1, f2;
f1.setNumerator(4);
f1.setDenominator(2);
f1.getDouble();
f1.outputReducedFraction();
f2.setNumerator(20);
f2.setDenominator(60);
f2.getDouble();
f2.outputReducedFraction();
system("pause");
return 0;
}
Fraction.h
#ifndef Fraction_H
#define Fraction_H
#include <iostream>
#include <iomanip>
using namespace std;
class Fraction
{
private:
int numerator;
int denominator;
public:
void setNumerator(int nu);
void setDenominator(int de);
void getDouble();
void outputReducedFraction();
};
#endif //Fraction_H
Fraction.h
#include "Fraction.h"
int gcd(int a, int b)
{
while ((a %= b) != 0 && (b %= a) != 0);
return a + b;
}
void Fraction::setNumerator(int nu)
{
numerator = nu;
}
void Fraction::setDenominator(int de)
{
denominator = de;
}
void Fraction::getDouble()
{
if (!(numerator % denominator)) // integer
cout << numerator / denominator << endl;
else
cout << fixed << setprecision(6) << (double)numerator / denominator << endl;
}
void Fraction::outputReducedFraction()
{
int greattestCommonDivisor = gcd(numerator, denominator);
if (!(numerator % denominator)) // integer
cout << numerator / denominator << endl;
else
cout << numerator / greattestCommonDivisor << "/" << denominator / greattestCommonDivisor << endl;
}
4.1-Class Point in plane
程式碼:
main.cpp
Point.cpp
Point.h
main.cpp
#include <iostream>
#include "Point.h"
using namespace std;
int main(void) {
Point point;
point.Set(0, 5);
cout << point.RetrieveVertical() << " " << point.RetrieveHorizontal() << endl;
point.Move(1, 2);
cout << point.RetrieveVertical() << " " << point.RetrieveHorizontal() << endl;
for (int i = 0; i < 4; i++) {
point.Rotate();
cout << point.RetrieveVertical() << " " << point.RetrieveHorizontal() << endl;
}
return 0;
}
Point.cpp
#include "Point.h"
void Point::Set(int x, int y)
{
vertical = x;
horizontal = y;
}
void Point::Move(int x, int y)
{
vertical += x;
horizontal += y;
}
void Point::Rotate()
{
int temp = vertical;
vertical = horizontal;
horizontal = temp * (-1);
}
Point.h
#ifndef Point_H
#define Point_H
#include <iostream>
using namespace std;
class Point
{
private:
int vertical;
int horizontal;
public:
Point()
{
vertical = 0;
horizontal = 0;
}
void Set(int vertical, int horizontal);
void Move(int x, int y);
void Rotate();
int RetrieveVertical() const { return vertical; }
int RetrieveHorizontal() const { return horizontal; }
};
#endif //Point_H
2020年4月3日 星期五
operator overloading
三種方法:
Overloading unary operator.
Overloading binary operator.
Overloading binary operator using a friend function.
(Types of Operator Overloading in C++)
以複數運算為例:
(原創) 如何使用Operator Overloading? (C/C++)
文章中的複數加法用的是第二種方法,即用member function;複數乘法則是第三種方法,即用 friend function.
complex1 + complex2 比較像是 complex1.+(complex2) ,也就是說complex1 呼叫了加法的函式,把complex2當成參數傳進去。
complex1 * complex2 的概念比較像一般的function ,把兩個複數當成參數傳進去。
其他參考文章:
https://stackoverflow.com/questions/13544364/over-loading-operator-must-take-either-zero-or-one-arguments
練習的code:
https://onlinegdb.com/SJSR5TEvI
Overloading unary operator.
Overloading binary operator.
Overloading binary operator using a friend function.
(Types of Operator Overloading in C++)
以複數運算為例:
(原創) 如何使用Operator Overloading? (C/C++)
文章中的複數加法用的是第二種方法,即用member function;複數乘法則是第三種方法,即用 friend function.
complex1 + complex2 比較像是 complex1.+(complex2) ,也就是說complex1 呼叫了加法的函式,把complex2當成參數傳進去。
complex1 * complex2 的概念比較像一般的function ,把兩個複數當成參數傳進去。
其他參考文章:
https://stackoverflow.com/questions/13544364/over-loading-operator-must-take-either-zero-or-one-arguments
練習的code:
https://onlinegdb.com/SJSR5TEvI
訂閱:
意見 (Atom)