字串轉數字被3整除
第一題:
描述:輸入一個字串,比如12345,拆分組合轉數字,求它所有可以被3整除的最大數
12 ,345 :2
12,3,45 :3
這裡用到了貪心演算法 和 一個規律:能被3整除的數的位數和也能被3整除:
#include <stdio.h> int maxthree(string str){ void doit(){ int main(){ } |
這個題用python做起來更簡單
#!/usr/bin/python # -*- coding: utf-8 -*- import sys line=sys.stdin.readline() print line print line.replace(' ','') #trainlines = label_folder.read().splitlines() #返回每一行的資料 a=int(line.split(' ')[0]) print a m,c=0,0 for b in str(a): c=c+int(b) if c%3==0: m=m+1 c=0 print(m) |
當然上題中添加了好多無關程式碼,只是為了學習python的語法!
第二題:
題目描述:給定一個數列:1,12,123,…,12345678910,1234567891011…,找出指定區間能被3整除的個數。
輸入描述:輸入兩個數字l和r,代表數列的第l個數和第r個數
輸出描述:輸出區間內能被三整除的個數
例:
輸入:2 5
輸出:3
因為12,123,1234,12345中能被3整除的有3個。
分析:
一個數能被3整除的等價情況就是這個數的各個位上的數的和能被3整除。1234567….n 這些數中,每三個數中有兩個能被3整除,當n滿足n%3 == 2時,那麼最後一位數也能被3整除。因此本題的解題思路是,先判斷從 l 到 r 中間有多少個能被3整除即 (r/3-l/3)*2,再考慮邊界條件,當第 l 個能整除3時,ans++;當 r%3 == 2時,則最後一位 r 也能整除3,ans++。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream>
#define LL long long
using namespace std;
LL a, b;
int main()
{
cin >> a >> b;
LL ans = (b / 3 - a / 3) * 2;
if (a % 3 == 0) ans++;
if ((b + 1) % 3 == 0) ans++;
cout << ans << endl;
return 0;
}