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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【c++算法刷题笔记】——洛谷1

發布時間:2023/12/3 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【c++算法刷题笔记】——洛谷1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2020/2/14-2/16

1. 循環提取一個數的每一位數字

while (d > 0) //d=0跳出循環 {x=d%10; //x每次為d的個位數 d = d / 10; //相當于d每次舍去個位數 }

2. c++new創建動態二維數組

int *a=new int[n]; //創建動態一維數組 int(* a)[2] = new int[n][2]; //創建動態二維數組[n][m]m必須為const常量

3. 洛谷上的一道題:

某校大門外長度為L的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1米。我們可以把馬路看成一個數軸,馬路的一端在數軸0的位置,另一端在L的位置;數軸上的每個整數點,即0,1,2,…,L都種有一棵樹。
由于馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起始點和終止點的坐標都是整數,區域之間可能有重合的部分。現在要把這些區域中的樹(包括區域端點處的兩棵樹)移走。你的任務是計算將這些樹都移走后,馬路上還有多少棵樹。
輸入格式:第一行有2個整數 L(1≤\leq L ≤\leq 10000)和 M(1≤\leq M≤\leq 100)M,L代表馬路的長度,M代表區域的數目,L和M之間用一個空格隔開。
接下來的M行每行包含2個不同的整數,用一個空格隔開,表示一個區域的起始點和終止點的坐標。
輸出格式:1個整數,表示馬路上剩余的樹的數目。

#include<iostream> using namespace std; int main() {int L, n;cin >> L >> n;int* a = new int[L]; for (int i = 0; i <=L; i++)a[i] = 1; //讓a數組元素全為1表示這里有樹int(* b)[2] = new int[n][2];for (int i = 0; i <n; i++) //輸入M個區域{for (int j = 0; j < 2; j++)cin >> b[i][j];}for (int i = 0; i < n; i++){for (int j = b[i][0]; j <= b[i][1]; j++) a[j] = 0; //在M區域范圍的a令為0,表示樹已經被砍}int sum = 0;for (int i = 0; i <= L; i++){sum += a[i];}cout << sum << endl; //輸出a中1的個數即為剩余的樹return 0; }

4. 洛谷上一道題P1553 數字反轉(升級版)中坑人的數:

0.00 0/111 0000/123 0% //這個坑死我了 12.00000

5. 回文數判斷:
洛谷:P1217 [USACO1.5]回文質數 Prime Palindromes總結
回文質數優化除了 11 以外的回文質數一定是奇數位數
一個整數如果奇數位的數字和等于偶數位的數字和,則其能被11整除。
偶數位數的回文數都能被11整除。所以除了 11 以外的回文質數一定是奇數位數

bool hui(int n) {unsigned i=n;unsigned m=0;while(i>0){m=m*10+i%10; //每次提取個位數然后乘以10在接著提取個位數i/=10;}return m==n; }

6.萬能開頭文件:

#include<bits/stdc++.h>//萬能頭文件

7.質數判斷(高效):
大于等于5的質數一定和6的倍數相鄰。例如5和7,11和13,17和19等等;
一個博主對質數判斷的總結下面代碼是這個博主寫的,貼貼過來作為筆記

bool isPrime_3( int num ) {//兩個較小數另外處理if(num ==2|| num==3 )return 1 ;//不在6的倍數兩側的一定不是質數if(num %6!= 1&&num %6!= 5)return 0 ;int tmp =sqrt( num);//在6的倍數兩側的也可能不是質數 在6兩邊的數不可能被2 3 4整除所以從5開始以6為步長for(int i= 5;i <=tmp; i+=6 )if(num %i== 0||num %(i+ 2)==0 )return 0 ;//排除所有,剩余的是質數return 1 ; }

7.有點愛上遞歸的簡潔洛谷P1028 數的計算:
我們要求找出具有下列性質數的個數(包含輸入的自然數nnn):
先輸入一個自然數nnn(nnn≤\leq 100010001000),然后對此自然數按照如下方法進行處理

  • 不作任何處理;
  • 在它的左邊加上一個自然數,但該自然數不能超過原數的一半;
  • 加上數后,繼續按此規則進行處理,直到不能再加自然數為止.
  • 輸出111個整數,表示具有該性質數的個數
    發現:f[i]=f[1]+f[2]+f[3]+...+f[i/2];f[i]=f[1]+f[2]+f[3]+...+f[i/2];f[i]=f[1]+f[2]+f[3]+...+f[i/2];iii為奇數時f[i]=f[i?1]f[i]=f[i-1]f[i]=f[i?1]當i為偶數時f[i]=f[i?1]+f[i/2];f[i]=f[i-1]+f[i/2];f[i]=f[i?1]+f[i/2];(通項公式做差可以求出)

    #include<iostream> using namespace std; int main() {int f[1001];int n;cin >> n;f[1] = 1;for (int i = 2; i <= n; i++){f[i] = f[i - 1];if (i % 2 == 0)f[i] += f[i / 2];}cout << f[n];return 0; }

    8.對于不安全情況的處理:

    #define _CRT_SECURE_NO_WARNINGS //或者 #pragma warning(disable:4996)

    9.填充以及輸出位數:

    #include<iomanip> cout<<setiosflags(ios::left)<<setfill('*')<<setw(5)<<endl; //左對齊(默認右對齊),每個輸出位占5,不夠以'*'填充(默認以空格填充) cout<<setiosflags(ios::fixed)<<setprecision(2); //保留兩位小數

    前兩天刷了刷洛谷,感覺已經刷不動了。算法知識為0,開始惡補算法!!!

    總結

    以上是生活随笔為你收集整理的【c++算法刷题笔记】——洛谷1的全部內容,希望文章能夠幫你解決所遇到的問題。

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