关于暴力解法的时间超限问题(完全数、质数、菱形)

一、完全数

暴力写法,从1到a遍历查找

for(int i = 1; i < a; i ++)
{
    if(a % i == 0) sum += i;
}

缩短时间的写法

for(int i = 1; i * i <= a; i ++)                
if(a % i == 0) 
{
    sum += i;
    if(i != a / i) sum += a / i;
}

常见的完全数有6, 28, 496,  8128,  33550336, 所以也可以直接判断>.<(Java版)

import java.util.Scanner;
public class Main
{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int x,n=sc.nextInt();
        for(int i=1;i<=n;i++)
        {
            x=sc.nextInt();
            if(x==6||x==28||x==496||x==8128||x==33550336) System.out.printf("%d is perfect\n",x);
            else System.out.printf("%d is not perfect\n",x);
        }
    }
}

完整代码C++

#include<iostream>
using namespace std;
int main()
{
    int n, a;
    cin >> n;
    while(n --)
    {
        cin >> a;
        int sum = -a;
        for(int i = 1; i * i <= a; i ++)                
        if(a % i == 0) 
        {
            sum += i;
            if(i != a / i) sum += a / i;
        }
        cout << a << (sum == a ? " is perfect" : " is not perfect") << endl; 
    }
    return 0;
}

Java

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();//输入测试用例的个数
        while(x -- > 0)
        {
            int a = sc.nextInt(), sum = -a;
            for(int i = 1; i * i <= a; i ++)                
            if(a % i == 0) 
            {
                sum += i;
                if(i != a / i) sum += a / i;
            }
            System.out.println(sum == a ? a + " is perfect" : a + " is not perfect");//判断是否是完全数
        }
    }
}

二、质数

判断一个数是否是质数和完全数类似

C++代码

#include<iostream>
using namespace std;
int main()
{
    int n, x, flag;
    cin >> n;
    while(n -- > 0)
    {
        flag = 1;//设立flag作为是否是质数的标志
        cin >> x;
        for(int i = 2; i * i <= x; i ++)
        {
            if(x % i == 0)
            {
                flag = 0;//flag为假,不是质数
                break;
            }
        }
        cout << x << (flag == 1 ? " is prime" : " is not prime") << endl;
    }
    return 0;
}
       

Java代码

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        while(n -- > 0)
        {
            int x = sc.nextInt(), flag = 1;//设立flag作为是否是质数的标志
            for(int i = 2; i * i <= x; i ++)
            {
                if(x % i == 0)
                {
                    flag = 0;//flag为假,不是质数
                    break;
                }
            }
            System.out.println(flag == 1 ? x + " is prime" : x + " is not prime");
            
        }
    }
}

三、菱形

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int h = sc.nextInt(), i, j;
        for(i = 1; i <= h; i ++)
        {
            if(i <= h / 2 + 1)
            {
                for(j = 1; j <= h / 2 + 1 - i; j ++)
                System.out.printf(" ");
                for(j = 1; j <= 2 * i - 1; j ++)
                System.out.printf("*");
                System.out.println();
            }
            else 
            {
                for(j = 1; j <= i - h / 2 - 1; j ++)
                System.out.printf(" ");
                for(j = 1; j <= 2 * h - 2 * i + 1; j ++)
                System.out.printf("*");
                System.out.println();
            }
        }
        
    }
}

升级以后

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int cx = n / 2, cy = n / 2;
        for (int i = 0; i < n; i ++ ) {
            for (int j = 0; j < n; j ++ ) {
                int d = Math.abs(i - cx) + Math.abs(j - cy);
                if (d <= n / 2)
                    System.out.printf("*");
                else
                    System.out.printf(" ");
            }
            System.out.println();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/m0_74776728/article/details/132204847
今日推荐