使用了两种错排问题算法,并对其进行了时间分析。
#include <iostream> #include <ctime> using namespace std; int power(int a, int b) { int sum = a; while (b > 1) { sum *= a; --b; } return sum; } long long Derangement(long long n) { if (n == 2) return 1; if (n == 1) return 0; else return (n - 1)*(Derangement(n - 1) + Derangement(n - 2)); } long long Derangement2(long long n) { if (n == 2) return 1; if (n == 1) return 0; else return (n*(Derangement2(n - 1)) + (long long)power(-1,n)); } int main() { long long n, t; clock_t startTime, endTime; cout << "请输入错排问题的参数n。" << endl; cin >> n; startTime = clock();//记录开始时间 t = Derangement2(n); endTime = clock(); //记录结束事件 cout << "排法一共有" << t << "种。" << endl; cout << "运算时间为:" << (double)(endTime - startTime) / CLOCKS_PER_SEC << "秒。" << ‘\n‘ << ‘\n‘; startTime = clock();//记录开始时间 t = Derangement(n); endTime = clock(); //记录结束事件 cout << "排法一共有" << t << "种。" << endl; cout << "运算时间为:" << (double)(endTime - startTime) / CLOCKS_PER_SEC << "秒。" << endl; //在time.h文件中定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元 return 0; }