vj2021/5/5_codeforces(入门组 *4+普及- *2)题解


这次的题解,是根据题单里的顺序来写的

A:Divisibility

原题链接
人性化题干链接
先放一下AC的代码

#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

原题链接
人性化题干链接
先是AC代码

#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

原题链接
人性化链接
AC:

#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

原题链接
人性化链接
AC

#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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值