杭电oj——简单数学题(题目篇)

记录一下我初学算法的刷题情况

文章里的题目有自己的想法,外加借鉴了其他一些博主的思路

目录

2031

2033

2070

2071

2075

2089

2090

2092

2096

2097

2098

2099


2031

//进制转换
#include<iostream>
using namespace std;

int main()
{
   int n,R;
   char num[17]="0123456789ABCDEF";
   char put[32];
   
   while(cin>>n>>R)
   {
       if(n<0)
       {
           cout<<"-";
           n=-n;
       }
       
       int i=0;
       while(n)
       {
           put[i]=num[n%R];//余数=各位上的数
           n/=R;
           i++;
           //取余自除
       }
       for(int j=i-1;j>=0;j--)
       {
           cout<<put[j];
       }
       cout<<endl;
   }
   return 0;
}

2033

//时间加法
#include<iostream>
using namespace std;

int main()
{
   int AH,AM,AS,BH,BM,BS;
   int n;
   cin>>n;
   while(n--)
   {
       cin>>AH>>AM>>AS>>BH>>BM>>BS;
       int count1=0,count2=0;
       int sub[3];
           
       count1=(AS+BS)/60;
       sub[0]=(AS+BS)%60;
      
       count2=(AM+BM+count1)/60;
       sub[1]=(AM+BM+count1)%60;
       
       sub[2]=AH+BH+count2;
       
       cout<<sub[2];
       for(int i=1;i>=0;i--)
           cout<<" "<<sub[i];
       cout<<endl;
   }
   
   return 0;
}

2070

#include<iostream>
using namespace std;

const int N=55;
long long f[N];

int main()
{
    int n;
    while(cin>>n&&n!=-1)
    {
        
    f[0]=0,f[1]=1;
    for(int i=2;i<=n;i++)
      f[i]=f[i-1]+f[i-2];
    cout<<f[n]<<endl;
    }
    return 0;
}

2071

//寻找成绩最高的学生
#include<iostream>
using namespace std;

const int N=110;
double hei[N];

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
         cin>>hei[i];
        
        double max=-1;
        for(int i=0;i<n;i++)
        {
            if(hei[i]>max)
             max=hei[i];
        }
        printf("%.2lf\n",max);
    }
    return 0;
}

2075

//正整数A能否被B整除: A/B
#include<iostream>
using namespace std;

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int a,b;
        cin>>a>>b;
        if(b==0) break;
        if(a%b==0) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}

2089

//不含有不吉利数字(4,62)的统计个数
//这题用的G++,C++显示Time Limit Exceeded
#include<vector>
using namespace std;

vector<int>v;

int num(int n)
{
    while(n!=0)
    {
        if(n%10==4||n%100==62)//判断各位数
        return 0;
     n/=10;
    }
    return 1;
}
int main()
{
    long long n,m;
    for(long long i=1;i<1000005;i++)
        {
            if(num(i)) v.push_back(i);
        }
    while(cin>>n>>m)
    {   
        if(n==0&&m==0) break;
        
        long long  count=0;
        for(long long j=0;j<v.size();j++)
        {
            if(v[j]>=n&&v[j]<=m)
           count++;
        }
        cout<<count<<endl;
    }
    return 0;
}

2090

//算菜价
#include<iostream>
#include<string>
using namespace std;

int main()
{
    string kind;
    double num,price;
    double sum=0;
    while(cin>>kind>>num>>price)
    {
        sum+=num*price;
    }
    printf("%.1lf",sum);
    return 0;
}

2092

//整数解
#include<iostream>
#include<cmath>
using namespace std;
//x+y=n,x*y=m;
//x+m/x=n;
//x*x-n*x+m=0;
//🔺=n*n-4*1*m;
//若存在x,y,则▲>0
int main()
{
    int n,m,ans,ans1;
    while(cin>>n>>m)
    {
        if(n==0&&m==0) break;
        ans=n*n-4*m;  //▲
        ans1=(int)sqrt(n*n-4*m); //开方默认ans大于等于0
        if(ans==ans1*ans1)  //确保解为整数,而不是分数
          cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}

2096

//A+B
//巧用函数
#include<iostream>
#include<cmath>

using namespace std;

int prime(int n)
{
    if(n>=100)
     return n%100;//变成两位数
    else
     return n;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,m;
        cin>>n>>m;
        //输出结果为两位数
        cout<<prime(prime(n)+prime(m))<<endl;
    }
    return 0;
}

2097

//十进制,十六进制,十二进制
#include<iostream>
#include<cmath>

using namespace std;

int ten(int n)
{
    int sum=0;
    while(n)
    {
        sum+=n%10;
        n/=10;
    }
    return sum;
}
int sixteen(int x)
{
    int sum=0;
    char num[17]="0123456789ABCDEF";
    
    for(int i=0;i<17;i++) num[i]=i;
   
    while(x)
    {
        sum+=num[x%16];
        x/=16;
    }
  return sum;
}
int twelve(int y)
{
    int sum=0;
    char num[13]="0123456789AB";
    for(int i=0;i<13;i++) num[i]=i;
    while(y)
    {
        sum+=num[y%12];
        y/=12;
    }
  return sum;
}
int main()
{
    int n;
    while(cin>>n&&n!=0)
    {
        if(ten(n)==sixteen(n)&&ten(n)==twelve(n))
         cout<<n<<" is a Sky Number."<<endl;
        else
         cout<<n<<" is not a Sky Number."<<endl;
    }
    return 0;
}

2098

#include<iostream>
#include<cmath>
using namespace std;

int prime(int n)
{
    for(int i=2;i<=sqrt(n);i++)
    {
        if(n%i==0) return 0;
    }
    return 1;
}

int main()
{
    int n;
    while(cin>>n&&n!=0)
    {
        int count=0;
        for(int i=2;i<=n/2;i++)
         {
              if(prime(i)&&prime(n-i)&&n-i!=i)
              count++;
          }
          cout<<count<<endl;
    }
    return 0;
}

2099

#include<iostream>
using namespace std;

int main()
{
    int n,m;
    int a[10001],b[10001];
    while(cin>>n>>m&&n!=0&&m!=0)
    {
        int x=0,y=0;
        for(int i=0;i<=9;i++)
          for(int j=0;j<=9;j++)
          {
              if((n*100+i*10+j)%m==0)
              {
                  x++;
                  a[x]=i;
                  b[x]=j;
              }
          }
        
        for(int i=1;i<x;i++)
        cout<<a[i]<<b[i]<<" ";
        cout<<a[x]<<b[x];
        cout<<endl;
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值