列表

详情


WY3. 小易的升级之路

描述

小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3...bn. 如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物,并 且使得自己的能力值增加bi;如果bi大于c,那他也能打败怪物,但他的能力值只能增加bi 与c的最大公约数.那么问题来了,在一系列的锻炼后,小易的最终能力值为多少?

输入描述

对于每组数据,第一行是两个整数n(1≤n<100000)表示怪物的数量和a表示小易的初始能力值. 然后输入n行,每行整数,b1,b2...bn(1≤bi≤n)表示每个怪物的防御力

输出描述

对于每组数据,输出一行.每行仅包含一个整数,表示小易的最终能力值

示例1

输入:

3 50
50 105 200
5 20
30 20 15 40 100

输出:

110
205

原站题解

C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2017-08-20


#include <stdio.h>
int gcd (int m,int n){
    if (n == 0)
        return m;
    else
        return gcd(n,m%n);
}
int main() {
    int n,a,num;
    while(~scanf("%d %d",&n,&a)){
        for (int i=0;i<n;i++){
            scanf("%d",&num);
            if (num <= a)
                a+=num;
            else
                a+=gcd(num,a);
        }
        printf("%d\n",a);
    }
    return 0;
}
/*#include <stdio.h>
辗转相除法求最大公约数
int gcd(int a,int b)
{
    /*if(a%b==0) return b;
    return gcd(b,a%b);
    int temp;
    while(b)
    {
        temp=a%b;
        a=b;
        b=temp;
    }
    return a;
    
}

int b[100000];
int main()
{

    int n,a;
    int i;
    
    int sum;
    while((scanf("%d%d",&n,&a)))
    {
        sum=a;;
    	for(i=0;i<n;i++)
        {
        	scanf("%d",&b[i]);
            if(b[i]<=sum)
            {
                sum=sum+b[i];
            }
            else if(b[i]>sum)
            {
            	sum=sum+gcd(sum,b[i]);    
            }
        }
        printf("%d\n",sum);
        
        
    }
    return 0;
}*/

C 解法, 执行用时: 2ms, 内存消耗: 380KB, 提交时间: 2020-08-27

#include<stdio.h>
int max(int x,int y){
    int temp;
    while(y){
        temp=x%y;
        x=y;
        y=temp;
    }
    return x;
}
int main(){
    int n,a,b;
    while(scanf("%d%d",&n,&a)!=EOF){
        for(int i=0;i<n;i++){
            scanf("%d",&b);
            if(a>=b)
                a+=b;
            
            else 
                a+=max(a,b);
            
        }
        printf("%d\n",a);
    }
    return 0;
}

C 解法, 执行用时: 3ms, 内存消耗: 292KB, 提交时间: 2021-09-19

#include <stdio.h>

int yueshu(int a,int b){
    int n = a>b?a:b;
    for(int i=n;i>=1;i--){
        if(a%i==0&&b%i==0){
            return i;
        }
    }
    return 1;
}

int main(){
    int n,a;
    while(scanf("%d %d",&n,&a)!=EOF){
        int b[n];
        for(int i=0;i<n;i++){
            scanf("%d ",&b[i]);
        }
        for(int i=0;i<n;i++){
            if(a>=b[i]){
                a = a+b[i];
            }else{
                a = a + yueshu(a,b[i]);
            }
        }
        printf("%d\n",a);
    }
    return 0;
}

C 解法, 执行用时: 3ms, 内存消耗: 296KB, 提交时间: 2021-10-03

#include<stdio.h>
int main()
{
    int n = 0 , N = 0;
    while(scanf("%d %d",&n,&N) != EOF )
    {
        int aby[n],i =0;
        while(i < n)
        {
            scanf("%d",&aby[i]);
            if(aby[i] <= N)
            {
                N += aby[i]; 
            }
            else
            {
                int max = aby[i] , min = N , com = 0;
                while(max % min != 0)
                {
                    com = max % min;
                    max = min;
                    min = com;
                }
                N += min; 
            }
            i++;
        }
        printf("%d\n",N);
    }
    return 0;
}

C 解法, 执行用时: 3ms, 内存消耗: 304KB, 提交时间: 2021-10-10

#include<stdio.h>
#include<string.h>
int main()
{
    int n, a, i;
    while (scanf("%d%d", &n, &a) != EOF)
    {
        int* p = (int*)malloc(n * sizeof(int));
        for (i = 0; i < n; i++)
        {
            int input = 0;
            scanf("%d", &input);
            *(p + i) = input;
        }
        i = 0;
        while (n--)
        {
            if (a >= *(p + i))
            {
                a += *(p + i);
            }
            else
            {
                int tmp = a;
                int c = 0;
                while (tmp>0)
                {
                    c = *(p + i) % tmp;
                    *(p + i) = tmp;
                    tmp = c;
                }
                a += *(p+i);
            }
            i++;
        }
        printf("%d\n", a);
    }
    return 0;
}

上一题