题目来源 牛客
①
输入
2
2
64
输出
2
3
说明
64可以被2整除,64“瘦身”一次后得到的10也可以被2整除,但将64“瘦身”两次后得到1不可以被2整除。而64,10,1都不能被3整除。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
string l;
bool judge(int p){
int d=0;
for(int i=0;i<l.size();i++){
d=d*10+l[i]-'0';
d%=p;
}
return d==0;
}
int main() {
int n;cin>>n;
while(n--){
cin>>l;
if(l.size()==1) printf("2\n");
else{
vector<int>v;
int now=0;
for(int i=0;i<l.size();i++){
now+=l[i]-'0';
}
v.push_back(now);
while(now>=10){
int tp=0;
while(now) tp+=now%10,now/=10;
v.push_back(tp);
now=tp;
}//至此 所有这些数都在动态数组里了
int ans;
for(int i=2;;i++){
int f=judge(i);
int ff=1;
for(int j=0;j<v.size();j++)
//*******************
if((v[j]%i==0)!=f){//这步是最关键的
ff=0;break;
}
//********************
if(ff) {
ans=i; break;
}
}
printf("%d\n",ans);
}
}
return 0;
}
要进行每个数的两两对比 因为题意是都能被整除或者都不能被整除的最小数m,如果中间有与其相反的结果那么说明不能用这个m,m++试试,m即这里的i。
②乘车上学
输入
10 10
输出
10.00
说明
公交车一定是每10分钟到达一辆,到达时就会接走所有等车的乘客。那么公交车到达时一定会有10个人在等车,因为距离上一班公交车过去了10分钟,在这10分钟里来了10位乘客。
啊啊啊这道题还蛮…说难其实也不难,说不难但是自己写写不出
想不到啊 哎…思维不够 刷题来凑
这个详细的讲解还蛮好的
http://www.duodaa.com/blog/index.php/archives/2080/
预防以后失效 也截个图吧
学习了一波之后 大概就能理解了。
当然实际的代码其实就只是这样…比赛时看了1个多小时都没看出来…
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
using namespace std;
#define pb push_back
typedef long long ll;
//const int maxn=;
double a,b;
int main(){
cin>>a>>b;
printf("%.2f\n",a*a/(a+b)+b*b/(a+b));
return 0;
}
今天也先到这里 欠的债多了~慢慢补吧 2019.12.2