1. 程式人生 > 其它 >資訊學奧賽一本通 1090:含k個3的數 | OpenJudge NOI 1.5 30

資訊學奧賽一本通 1090:含k個3的數 | OpenJudge NOI 1.5 30

技術標籤:C++基礎資訊學奧賽一本通題解OpenJudge NOI題解c++

【題目連結】

ybt 1090:含k個3的數
OpenJudge NOI 1.5 30:含k個3的數

【題目考點】

1. 分離整數的各位數字

對於數字a,a%10可以取到其個位,a/=10(整除)可以去掉其當前個位。
重複這一過程,即可從低位到高位分離各位上的數字。
例:分離數字123的各位數

aa%10a/10
123312
1221
110

每次迴圈中,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

【題解程式碼】

解法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; }