个人题解
这次的题解,是根据题单里的顺序来写的
A:Divisibility
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int n;
long long int k = 0;
scanf("%lld",&n);
printf("%lld",n/2520);
return 0;
}
再放一下第一次写的代码,本人是一个特别懒惰的人,是一个完全没有过脑子的代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int n;
int k = 0;
scanf("%lld",&n);
for(long long int i = 1; i <= n ; i ++){
if(i%6 == 0 && i%7 == 0 && i%8 == 0 && i%9 == 0 && i%10 == 0)k ++;
}
printf("%d",k);
return 0;
}
铁定超时或者复杂度过高的一个代码,
如果一个数可以被2~10之间的所有整数整除的话,那么它一定可以整除这几个数的最小公倍数,就看这个n可以除开几个最小公倍数了。
B:Home Numbers
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
cin >> n >> m;
if(m % 2 != 0){
cout<<(m+1)/2;
}
else{
cout<<(n-m+2)/2;
}
return 0;
}
下面是我第一次提交的错误代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,dis = 0;
//scanf("%d",&n,&m);
cin >> n >> m;
if(m % 2 != 0){
cout<<(m+1)/2;
} //dis= (m+1)/2;
else{
//dis=(n-m+2)/2 ;
cout<<(n-m+2)/2;
}
// printf("%d",dis);
return 0;
}
我现在又重新看了一下,第一次没有过可能是因为当时网不好???
C:Comparing Two Long Integers
#include<bits/stdc++.h>
using namespace std;
char a[1000005],b[1000005];
int l1,r1,l2,r2;
int main()
{
cin >> a >> b;
r1 = strlen(a);
r2 = strlen(b);
for(int i = 0; i <= r1 - 1; i ++){
if(a[i] == '0')l1 ++;
else
break;
}
for(int i = 0; i <= r2 - 1; i ++){
if(b[i] == '0')l2 ++;
else
break;
}
if(r1 - l1 > r2 - l2)printf(">");
else if(r1 - l1 < r2 - l2)printf("<");
else{
int i = 0;
while(i <= r1 - l1){
if(a[l1 + i]>b[l2 + i]){
printf(">");
return 0;
}
else if(a[l1 + i]<b[l2 + i]){
printf("<");
return 0;
}
i ++;
}
printf("=");
}
return 0;
}
思路:
先判断两个数是几位数,位数多的数一定是大的,再判断每一位的数字,从高位往低位比较,在同一位上,数字大的一定比数字小的数大
之后就是不动脑子的错误代码了
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
scanf("%d",&a);
scanf("%d",&b);
if(a > b)printf(">");
else if(a < b)printf("<");
else{
printf("=");
}
return 0;
}
D:Multiplication Table
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int n,x;
long long int s = 0;
scanf("%lld%lld",&n,&x);
for(long long int i = 1; i <= n; i ++){
if(x % i == 0 && n * i >= x)s ++;
}
printf("%lld",s);
return 0;
}
思路
在第n行上的数,都是n的倍数,所以枚举每一行,再判断x是不是在第n行就可以了
第一遍没有脑子的代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,x;
int s = 0;
scanf("%d%d",&n,&x);
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= n ; j ++){
if(i * j == x) s ++;
}
}
printf("%d",s);
return 0;
}
E:Timofey and cubes
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int a[n];
for(int i = 1; i <= n; i ++){
scanf("%d",&a[i]);
}
for(int i = 1; i <= n/2; i = i + 2){
swap(a[i],a[n-i+1]);
}
for(int i = 1; i <= n; i ++)printf("%d ",a[i]);
return 0;
}
思路
它是交换第一个元素和最后一个元素,第三个元素和倒数第三个元素
F:Masha and Bears
#include<bits/stdc++.h>
using namespace std;
int main()
{
int v1,v2,v3,v4;
scanf("%d%d%d%d",&v1,&v2,&v3,&v4);
if(v2<=v4 || v3 > 2 * v4 || v4 > 2 * v3)printf("-1");
else{
printf("%d\n",2*v1);
printf("%d\n",2*v2);
printf("%d\n",max(v3,v4));
}
return 0;
}