Just say hello to algorithm

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Just say hello to algorithm相关的知识,希望对你有一定的参考价值。

-我实在是太缺练,而且那么笨。

Just say hello to algorithm

做了一下以前发的简单的题目,a题非常水,然而还是wa了一次,因为no greater than 2^32 要开long long,用int 不行,int范围是-2^32~2^32-1

F题

Design Tutorial: Learn from Math

题意:给你一个大于等于12的数,要你用两个合数表示出来。//合数指自然数中除了能被1和本身整除外,还能被其他的数整除(不包括0)的数。

分析:为什么给你大与等于12呢,我们知道偶数除了2都是合数,这样给你一个偶数,你减去一个偶数得到的就是偶数啦,因为n>=12,所以减去4的话,得到的是>=8的偶数,肯定也是合数,当然你也可以减去6、8,大于8就不行了。

然后给你奇数呢?你减去给奇数就得到偶数啦,减去一个是合数的奇数,最小的就是9,奇数时:n>=13,n-9>=4

#include<stdio.h>
int main(){
    int a,b;
    int n;
    scanf("%d",&n);
    if(n%2){
        printf("%d %d\n",9,n-9);
    }else{
        printf("%d %d\n",8,n-8);
    }
    return 0;
}

这题也可以枚举

#include<stdio.h>
int isComposite(int a){
    if(a==2)return 0;
    for(int i=2;i*i<=a;i++)
        if(a%i==0)return 1;
    return 0;
}

int main(){
    int a,n;
    scanf("%d",&n);
    for(a=2;a<n;a++)
        if(isComposite(a)&&isComposite(n-a)){
            printf("%d %d",a,n-a);
            break;
        }
    return 0;
}

  

H题 Pseudoprime numbers

题意:求1^m + 2^m + 3^m + …… + n^m(答案mod 1e9+7)

注意:每个加起来的时候和加起来后也要mod

#include<stdio.h>
#define M 1000000007
long long qpow(long long a,long long m)//快速幂
{
    long long ans=1,k=a;
    while(m)
    {
        if(m&1)
            ans=(ans*k)%M;
        k=(k*k)%M;
        m>>=1;
    }
    return ans;
}
int main()
{
    long long n,m,ans;
    while(scanf("%lld%lld",&n,&m)!=EOF)
    {
        ans=0;
        for(int i=1; i<=n; i++)
            ans+=qpow(i,m)%M;//这里mod一下
        printf("%lld\n",ans%M);//这里mod一下
    }
    return 0;
}

  

G题 SwapSort

题意:用少于n次的swap来排好序

分析:选择排序,每次在未排序的后面选出最小的一个然后和未排序的第一个交换,这样最多n-1次交换即可排好序,用数组记录交换的两个数的位置。

#include<stdio.h>
int n,i,j,a[3002],coun,temp,swap1[3001],swap2[3001];
int main()
{
    scanf("%d",&n);
    for(i=0; i<n; i++)
        scanf("%d",a+i);
    for(i=0; i<n-1; i++)
    {
        int minj=i;
        for(j=i+1; j<n; j++)
            if(a[j]<a[minj])minj=j;
        if(i!=minj)
        {
            swap1[coun]=i;
            swap2[coun]=minj;

            temp=a[minj];
            a[minj]=a[i];
            a[i]=temp;

            coun++;
        }
    }
    printf("%d\n",coun);
    if(coun)
        for(i=0; i<coun; i++)
            printf("%d %d\n",swap1[i],swap2[i]);
    return 0;
}

  

 

 

-我太笨了,要加油啊!

 

以上是关于Just say hello to algorithm的主要内容,如果未能解决你的问题,请参考以下文章

pandas DataFrame过滤器正则表达式

在 UIImage 中更改 JUST .scale?

[2016-3-29]OMG美语每日笔记-What would you say if you start feel like the other person is just not in the m

HDU1698 Just a Hook

Django_say_hello

Spring-Boot say hello world