记录一下我初学算法的刷题情况
文章里的题目有自己的想法,外加借鉴了其他一些博主的思路
目录
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;
}