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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

回文数的个数、杨辉三角

發布時間:2024/4/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 回文数的个数、杨辉三角 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


全部翻轉

#include <bits/stdc++.h>using namespace std;bool is_palindrome(int n) {int n1 = n, n2 = 0;while (n1 > 0) {//首先只有大于0的正整數滿足下一步判斷n2 = n2 * 10 + n1 % 10;//將數字翻轉,則首先取最后一位,除10取余,拿出最后一位n1 /= 10; //取一位就減少一位,除10取整,刪掉最后一位}return n == n2; }int main() {int n;cin >> n;int cnt = 0;//計數器for (int i = 1; i <= n; ++i) {if (is_palindrome(i)) ++cnt;}cout << cnt << endl;return 0; }

部分翻轉

可以將整數的最后一半數字進行整數反轉,然后將反轉的部分與數字的前部分進行比較,判斷是否是回文數。也可以將整個整數進行反轉然后進行比較,但是會發生溢出情況,所以可以選擇只反轉數字的后半部分,若與前半部分相同則為回文數。

若該整數是一個負數那么肯定不是回文數,或者該整數的最后一位為0而第一位不為0也不可能是回文數,所以可以直接將這兩種情況判斷返回false。

此時剩下的普通情況的話,此處分為兩種情況,若假設該數字是一個回文數,若是回文數的話,長度又分為奇數和偶數。

若該整數長度為奇數的話那么反轉一半的標志就是反轉的數字與目前剩下的前面的那部分數字相同了,此時應停止反轉;

若該回文整數長度為偶數的話,我們將中間的那個元素歸在反轉數字中(例如:12321 我們將從1一直反轉到3才停止)此時反轉后的數字123大于目前剩下的12的時候停止反轉。

若假設該數字不是一個回文數字,其中若整數長度無論是偶數還是奇數,進行反轉的時候,反轉的數字和目前前半部分剩下的數字永遠不可能相等的,所以停止反轉的標志就是當反轉的數字大于目前前半部的數字的時候,停止反轉。停止反轉后,我們只需要將反轉的結果和目前剩下的前半部分進行對比就行。

在此處,若該數字是回文數的話,長度并且為奇數的時候(之前回文數長度為奇數的時候,我們反轉的時候是將中間的那個數字算了進去),所以在最后進行對比的時候,要將反轉的數字/10,再與前半部分的數字進行對比才可以,若該回文數長度是偶數的話,只需要將反轉數和前半部數字直接對比就可以。而若該數字不是回文數的話,無論是奇數還是偶數長度,它都是不可能滿足以上兩種可能的,所以若都不滿足以上的兩種情況的話就說明該數字不是回文數。

bool is_palindrome(int x) {int sum=0;if(x<0 || (x/10!=0 && x%10==0)){return false;}else{while(x>sum) //注意是大于號,等于的時候就退出了,可以在下面判斷該整數是否為偶數{sum = sum * 10 + x%10;x = x/10;}}/*若整數為偶數*/if(sum == x){return true;}/*若整數位數為奇數*/if(sum/10 == x){return true;}return false;}

O(log10(n))。

#include <bits/stdc++.h>using namespace std;int main() {int n;cin >> n;constexpr int MAXN = 25;int data[MAXN][MAXN] = {0};data[0][0] = 1;data[1][0] = 1;data[1][1] = 1;for (int i = 2; i < MAXN; ++i) {/* 每行的第一個元素都是1 */data[i][0] = 1;/* 中間元素的值 等于左上方的元素的值 加上正上方的元素的值 */for (int j = 1; j < i; ++j) {data[i][j] = data[i - 1][j - 1] + data[i - 1][j];}/* 每行的最后一個元素都是1 */data[i][i] = 1;}//輸出結果for (int i = 0; i < n; ++i) {for (int j = 0; j <= i; ++j) {cout << data[i][j];if (j < i) cout << " ";}cout << endl;}return 0; }

總結

以上是生活随笔為你收集整理的回文数的个数、杨辉三角的全部內容,希望文章能夠幫你解決所遇到的問題。

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