First Blood(C语言)

来源:互联网 发布:加密国际算法有哪些 编辑:程序博客网 时间:2024/04/29 04:58

Description


盖伦是个小学一年级的学生,在一次数学课的时候,老师给他们出了一个难题:

老师给了一个正整数 n,需要在不大于n的范围内选择三个正整数(可以是相同的),使它们三个的最小公倍数尽可能的大。盖伦很想第一个解决这个问题,你能帮助盖伦拿到“first blood”吗?



Input


首先是一个正整数T,表示有T组测试数据

每组测试数据是一个正整数n(1<=n<=10^6)


Output


对于每组测试数据,输出最大的最小公倍数,每个输出单独占一行


Sample Input


2
9
7

Sample Output


504

210

题目链接:  http://ccpc.ahu.edu.cn:8080/OJ/Problem.aspx?id=739

AC代码:

#include<stdio.h>int main(){    int T,i;    scanf("%d",&T);    __int64 n;//注意题目的要求范围,试用临界点是否满足数位不够用长长整型    while(T--){//遇到组数的最好用T--的方法,不是遇到scanf函数为特别的值的问题可以不用scanf的值来终止        scanf("%I64d",&n);        //for(j=0;j<n;j++){        //    a[j]=j;        //}        if(n==1) printf("1\n");        else if(n==2) printf("2\n");        else if(n%2!=0) printf("%I64d\n",n*(n-1)*(n-2));       //同样也是分为奇偶讨论,在偶数状态时是否为3的倍数也在讨论的范围内。        else {   if(n%3!=0)  printf("%I64d\n",n*(n-1)*(n-3));            else   printf("%I64d\n",(n-3)*(n-1)*(n-2));      //长长整形输出是用%I64d
        }    //    n=0;        }        return 0;}
要点:

题目算法不难,但要考虑周到有点困难。不要只向着某一个思维点,这个题目不同情况下如何取最大值是要点,要想到退位数比除二更大

注意:

尝试样例输出时必须要尝试临界条件上的点是否满足。不能只针对所给的样列输出


原创粉丝点击