資訊學奧賽一本通 1090:含k個3的數 | OpenJudge NOI 1.5 30
阿新 • • 發佈:2021-01-10
技術標籤:C++基礎資訊學奧賽一本通題解OpenJudge NOI題解c++
【題目連結】
ybt 1090:含k個3的數
OpenJudge NOI 1.5 30:含k個3的數
【題目考點】
1. 分離整數的各位數字
對於數字a,a%10可以取到其個位,a/=10(整除)可以去掉其當前個位。
重複這一過程,即可從低位到高位分離各位上的數字。
例:分離數字123的各位數
a | a%10 | a/10 |
---|---|---|
123 | 3 | 12 |
12 | 2 | 1 |
1 | 1 | 0 |
每次迴圈中,a變為a/10,迴圈中取a%10,為當前a的個位,即為分離出的數字。當a為0時迴圈結束。
其原理為對數字的按位權展開。
例:輸入一個整數,從低位到高位輸出其各位數字,並用空格分隔,程式碼為:
int n;
cin>>n;
for(int a = n; a > 0; a /= 10)
cout<<a % 10<<' ';
2. 判斷整除
【解題思路】
- 首先判斷該數字是不是19的倍數
- 如果是,那麼統計該數字中有幾位是數字3
- 如果數字3有k個,那麼輸出YES
- 否則輸出NO
- 如果不是,直接輸出NO
- 如果是,那麼統計該數字中有幾位是數字3
【題解程式碼】
解法1:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int m, k;
cin>>m>>k;
int c = 0;//統計數字m中3的個數
if (m % 19 == 0)//如果m是19的倍數
{
while(m > 0)
{
if (m % 10 == 3)
c++;
m /= 10;
}
if (c == k)//如果m的各位數字中有k個3
cout<<"YES"<<endl;
else
cout<<"NO"<< endl;
}
else
cout<<"NO"<<endl;
return 0;
}