晚上好大家看我的对吗

输入n(1到18),输出一个十位数加个位数等于n的两位数
以下为凑字数拉连续三次安居习惯熬夜发财白蛇传说

img


#include <stdio.h>

int main(void)
{
    int n,a,b;
    printf("请输入一个(1到18)的整数:");
    scanf("%d",&n);
    for (b=0; b<=9; b++)
    {
        a=n-b;
        if (a>=10)
        {
            printf("%d%d\n",a,b);
        }    
    }
    return 0;
}
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/1091806
  • 这篇博客你也可以参考下:请求发出后延迟n秒对方才收到的情况问题解决
  • 除此之外, 这篇博客: 算法训练 最大最小公倍数 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。中的 思路 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 本来想的草率了,只想着在1-N之间组合3个数,依次算出来每个组合的最大最小公倍数,但是发现不行…这样复杂度太高了,根本运行不出来…但是题目中给的较小数字的例子是可以运行出来的~~

    代码是这样的(错误示范):

    #include <stdio.h>
    long long f(int a,int b,int c)
    {
    	int i;
    	int area = 1;
    	for(i=2;i<=a;i++)
    	{
    		if(a%i==0 && b%i==0 && c%i==0)
    		{
    			a/=i;
    			b/=i;
    			c/=i;
    		}
    		else if(a%i==0 && b%i==0)
    		{
    			a/=i;
    			b/=i;
    		}
    		else if(a%i==0 && c%i==0)
    		{
    			a/=i;
    			c/=i;
    		}
    		else if(b%i==0 && c%i==0)
    		{
    			b/=i;
    			c/=i;
    		}
    		else
    			continue;
    	}
    	return a*b*c;
    }
    int main ()
    {
    	int n;
    	long long max=1;
    	scanf("%d",&n);
    	int i,j,k,l;
    	for(i=n;i>=1;i--)
    	{
    		for(j=i-1;j>=1;j--)
    		{
    			for(k=j-1;k>=1;k--)
    			{
    				if(f(i,j,k)>max)
    					max=f(i,j,k);
    			}
    		}
    	}
    	printf("%lld",max);
    	return 0;
     } 
    

    经过研究博客里大佬的思路,总结这道题的解法如下:

    在一组数中找三个数,使他们的最小公倍数最大,我们知道,两个数的最小公倍数在最大的情况就是当两个数互质的时候,他们的最小公倍数就是这两个数的乘积,而且还有那么一个定理,即两个相邻的自然数互质,即使我们不知道定理怎么证明,但大体能想出来,但这是三个数,也就是说存在 奇-偶-奇 和 偶-奇-偶 两种情况。

    一: 奇-偶-奇 这种情况用于n是奇数的情况,即 最大的三个数就是 n,n-1,n-2,那么可以看到,因为n和n-2都是奇数,所以肯定不存在公因数2,假设三个数中有一个存在因数3,那么另外两个肯定不存在因数3,因为他们的变化范围都小于3,也就是说,这三个数不仅是最大的,还是互质的,也就是说最大的最小公倍数就是这三个数的乘积,即n*(n-1)*(n-2)相信大部分人都可以想到这一步

    二: 偶-奇-偶 对于这种情况两个偶数肯定是存在公因数2,也就是意味着最小公倍数要除以2,这是绝对不能容忍的,所以我们稍微缩小一下数,即n,n-1,n-3,这样就又变成奇-偶-奇的结构了,但还有一个问题,就是假如偶数n存在因数3,那么n-3也必定有因数3,这直接导致最小公倍数除以3,更加不能容忍,为了保持奇-偶-奇的结构不变,只能变那个偶数,而离他最近的偶数就是n-2了,这下就完美了,3个数依然是互质的,最小公倍数就是(n-1)(n-2)(n-3)

    代码~:

    #include <stdio.h>
    int main()
    {
    	long long n,ans;
    	scanf("%lld",&n);
    	if(n%2==1)
    		ans=n*(n-1)*(n-2);
    	else
    	{
    		if(n%3==0)
    			ans=(n-1)*(n-2)*(n-3);
    		else
    			ans=n*(n-1)*(n-3);
    	}
    	printf("%lld",ans);
    	return 0;
    }