1.1Candy

该博客介绍了如何计算三个整数之和为3的倍数的不同组合数量。文章涉及C语言编程,使用了数学库函数pow和取模运算,并给出了处理溢出问题的小技巧。在代码实现中,根据输入数值对3的余数划分了三个等价类,然后通过组合数学计算每种情况下组合的总数,并输出结果。
摘要由CSDN通过智能技术生成

一.小知识点

        1.调用幂函数<math.h> pow(x,y)

        2.取模:%

二.题目

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3dlZXQtPnN3ZWF0,size_20,color_FFFFFF,t_70,g_se,x_16

 

三.实现的注意

        1.求三个等价类的数量的时候可以直接➗N,通过余数来求。(余0则三个等价类数量相等,余1则【1】多一个(+1);余2则【1】多一个(+1),【2】多一个(+1))

        2.long long 与 int 的范围

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3dlZXQtPnN3ZWF0,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc3dlZXQtPnN3ZWF0,size_20,color_FFFFFF,t_70,g_se,x_16

 

                 (1)各种类型的输入输出??????

 

 

        3.小技巧

                (1)为了防止爆int,将a,b,c都定义为long long int(因为后面有a*b*c,int*int还是int)

                (2)进行a*b*c时先分开取模

                         ec2c582f258f4e15ac0c2f109ffebf1e.png

四.代码

 //三个数和 为 三的倍数有几种情况 
#include <stdio.h>
#include <math.h>
int main()
{
	long long int N,i,j,k;
	long long int result;
	long long int mod=pow(10,9)+7;
	while(1){
		scanf("%lld",&N);
		if(N==0) break;
		long long int a=0,b=0,c=0;
		long long int flag=N%3,f=N/3;
		if(flag==0){
			a=f;
			b=f;
			c=f;
		}
		else if(flag==1){
			a=f+1;
			b=f;
			c=f;
		}
		else if(flag==2){
			a=f+1;
			b=f+1;
			c=f;
		}
	//	printf("%d,%d,%d\n",a,b,c); 
		i=a*(a-1)*(a-2)/(3*2)%mod;
		j=b*(b-1)*(b-2)/(3*2)%mod;
		k=c*(c-1)*(c-2)/(3*2)%mod;
		result=i+j+k+(a*b)%mod*(c%mod);
		printf("%lld\n",result%mod);
	}
	return 0;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴同学·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值