初级算法-数学

文章目录

        • Fizz Buzz
          • 题意:
          • 解:
          • 代码:
        • 计数质数
          • 题意:
          • 解:
          • 代码:
        • 3的幂
          • 题意:
          • 解:
          • 代码:
        • 罗马数字转整数
          • 题意:
          • 解:
          • 代码:

Fizz Buzz

题意:

解:

遍历+判断

代码:
#include
using namespace std;
vector fizzBuzz(int n)
{
    vectorans;
    for(int i=0;i>n;
    vectorans=fizzBuzz(n);
    for(auto &s:ans) cout<

计数质数

题意:

给定整数 n ,返回 所有小于非负整数 n 的质数的数量

解:

埃氏筛板子,longlong防溢出

代码:
#include
using namespace std;
static constexpr int Nmax=5E6+7;
vectorbook;
int countPrimes(int n)
{
    int ans=0;
    book.resize(n);
    for(int i=2;i>n;
    int ans=countPrimes(n);
    cout<

3的幂

题意:

给定一个整数,写一个函数来判断它是否是 3 的幂次方

解:

递归很好写,but评论区里真的看到了很数学的做法

int范围内3的最大幂为1162261467,只要判断1162261467%n是不是等于0就好了,因为求的是3的幂且3为质数无法拆分,所以可以这么做

代码:
#include
using namespace std;
bool isPowerOfThree(int n)//数学法 
{
    if(n<=0) return false; 
    return 1162261467%n==0;
}
/*
bool isPowerOfThree(int n)//循环法 
{
    if(n<=0) return false; 
    while(n>1)
    {
        //cout<<"n:"<>n;
    bool ans=isPowerOfThree(n);
    cout<

罗马数字转整数

题意:

如题

解:

数学题有点难QWQ

对于这题来说(其他罗马数字我不道啊)

罗马数字是从大到小的,所以如果一个表示小的数字右边有一个表示大的数字说明他们是一体的,用map映射即可

代码:
#include
using namespace std;
int romanToInt(string s)
{
    mapmp={ {"I",1},{"V",5},{"X",10},{"L",50},{"C",100},{"D",500},{"M",1000},
                    {"IV",4},{"IX",9},{"XL",40},{"XC",90},{"CD",400},{"CM",900} };
    int ans=0,lg=s.length();
    for(int i=0;imp[s1])
            {
                ans+=mp[s1+s2];
                i++;
            }
            else ans+=mp[s1];
        }
        else
        {
            string s1(1,s[i]);
            ans+=mp[s1];
        }
    }
    return ans;
}
int main()
{
    string s;cin>>s;
    int ans=romanToInt(s);
    cout<

你可能感兴趣的:(力扣每日一题,leetcode,算法,c++)