日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法竞赛入门经典习题

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法竞赛入门经典习题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一章:程序設計入門

總結
1、%.2f 表示保留兩位小數

2、const double Pi=acos(-1.0) //盡量用const聲明常量

3、三整數排序:

If(a>b) {交換} if(a>c){交換} if(b>c){交換}`

第二章:循環結構設計

總結

1、重復次數可變、遞增:for(初始化 ; 條件 ; 調整)
循環次數不確定、也不是遞增:while
循環終止判斷是在計算之后:do while

2、溢出問題:int32_t uint32_t (約21億) 若溢出用 long long
檢查方法:輸出中間變量

3、管道輸入:echo 內容 | 程序名

4、計時函數:

#include <time.h> (double)clock() / CLOCKS_PER_SEC 可以寫出當前程序運行的秒數

5、遇到沒有輸入結束標志:

While(scanf(“%d”,&x)==1) //scanf返回輸入的變量個數 想要結束:windows: enter Ctrl+Z enterLinux:Ctrl+D

6、不想刪除某些信息的寫法

#define Local #ifdef Local freopen("txt.in","r",stdin);freopen("txt.out","w",stdout);#endif //注釋用`

7、遇到最大值最小值問題:可以先規定一個最大值INF 最小值就是 -INF。

8、嵌套的兩層代碼塊,內層會隱蔽外層。

9、 iomanip,在C++程序里面經常見到下面的頭文件#include ,io代表輸入輸出,manip是manipulator(操縱器)的縮寫(在c++上只能通過輸入縮寫才有效)。

  • 水仙花數
  • #include <iostream> using namespace std; int main() {int a, b, c;int sum = 0;for (int i = 100; i <= 999; ++i){a = i % 10;b = (i / 10) % 10;c = i / 100;sum = a * a * a + b * b * b + c * c * c;if (i == sum)cout << i<<" ";} }
  • 韓信點兵
  • /*沒能寫出直接輸入多行的情況,只能實現一行一行輸入*/ #include <iostream> using namespace std;int main() {//freopen("1.txt","r",stdin);int a, b, c;int flag = 0;int n = 0;while (scanf("%d %d %d", &a, &b, &c)==3){n++;for (int i = 10; i < 100; ++i){if (i % 3 == a && i % 5 == b && i % 7 == c){flag++;cout << "case " << n << ":" << i;break;}}if (flag == 0)cout << "No answer" << endl;cin.get();}return 0; }
  • 倒三角形
  • /*改進版打印沙漏*/ #include <iostream> using namespace std;int main() {int N;cin >> N;for (int i = N; i >= 1; --i){for (int j = N - i; j > 0; --j)cout << " ";for (int k = 1; k <= 2 * (i - 1) + 1; ++k)cout << "*";cout << endl;}for (int i = 2; i <= N; ++i){for (int j = N - i; j > 0; --j)cout << " ";for (int k = 1; k <= 2 * (i - 1) + 1; ++k)cout << "*";cout << endl;} }
  • 子序列的和
  • #include <iostream> using namespace std;int main() {//freopen("1.txt","r",stdin);long long n, m; //首先第一個注意的是平方溢出問題,所以要用longlongfloat sum = 0.0;int flag = 0;while (scanf("%lld %lld", &n, &m)==2 && n!=0 && m!=0){flag++;for (float i = n; i <= m; ++i) //其次,只有浮點數的計算才是浮點數,1是整數,所以i一定要是浮點數{sum += 1 / (i * i);}cout << "Case" << flag << ":";printf("%.5f\n", sum);sum = 0; //最后,sum一定要更新,否則會在原來的sum上進行累加出錯} }
  • 分數化小數
  • #include <iostream> #include <iomanip> using namespace std;int main() {//freopen("1.txt","r",stdin);double a, b;double c;double res;while (scanf("%lf %lf %lf", &a, &b, &c) && a != 0, b != 0, c != 0){res = a / b;cout<< setiosflags(ios::fixed) << setprecision(c)<<res;//C++中格式化方式} }
  • 排列
  • #include <iostream> using namespace std;int main() {int a,b, c;for (a = 123; a < 329; ++a) //這里要限定一下最小的那個數字的范圍{b = 2 * a;c = 3 * a;int d[10]{};int flag = 0;d[a % 10]++;d[a / 10 % 10]++;d[a / 100]++;d[b % 10]++;d[b / 10 % 10]++;d[b / 100]++;d[c % 10]++;d[c / 10 % 10]++;d[c / 100]++;for (int i = 1; i <= 9; ++i){if (d[i] == 1)flag++;}if (flag == 9)cout << a << " " << b << " " << c<<endl;} }

    第三章:數組和字符串

  • 蛇形填數
  • /*好像是一道面試題,我感覺還挺重要的*/ #include <iostream> #include <iomanip> using namespace std;int a[50][50]{};int main() {int N;int x, y;int res = 1;cin >> N;a[x=0][y=N - 1] = 1;while (res < N * N){while (x + 1 < N && !a[x + 1][y]) a[++x][y] = ++res;while (y - 1 >= 0 && !a[x][y-1]) a[x][--y] = ++res;while (x - 1 >= 0 && !a[x-1][y]) a[--x][y] = ++res;while (y + 1 < N && !a[x][y+1]) a[x][++y] = ++res;}for (x = 0; x < N; x++){for (y = 0; y < N; y++){printf("%3d",a[x][y]);}printf("\n");} }

    總結

    以上是生活随笔為你收集整理的算法竞赛入门经典习题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。