整数划分编程
⑴ 如何用c++求解整数划分问题
贴个c语言的:*
描述 Description �0�2
�0�2 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。
例如:n=7,k=3,下面三种分法被认为是相同的。
1,1,5; 1,5,1; 5,1,1;
问有多少种不同的分法。
�0�2
�0�2 �0�2
�0�2 �0�2
�0�2输入格式 Input Format �0�2
�0�2 输入n,k (6<n<=200,2<=k<=6) �0�2
�0�2 �0�2
�0�2 �0�2
�0�2输出格式 Output Format �0�2
�0�2 一个整数,即不同的分法。�0�2
�0�2Input : 7 3
�0�2output: 4
*/
/*
解题思路:�0�2
我用的是一种比较慢的搜索扩展方法:
比如:
�0�27 = 1+6 6 又可以扩展成:6 = 1+5 很显然这是一个递归的过程
�0�27 = 2+5 5 --> 5= 2+3 不过要注意的是:只要在扩展过程中保证当前所扩展的值不小于前一个即可
�0�27 = 3+4
*/
#include <stdio.h>
#define MAX 101
int n,k ;
long total = 0 ;
void fenjie(int s,int t,int end,int *sum)
{
�0�2 int p,q ;
�0�2 �0�2
�0�2 if(t == k)/*找到一个*/
�0�2 {
�0�2 total ++ ;
�0�2 /*for(q = 1 ; q <= k ; q++)
�0�2 printf("%d ",sum[q]);
�0�2 printf(" ");*/
�0�2 }
�0�2 �0�2
�0�2 else
�0�2 {
�0�2 for(p=s ; p<=end/2 ; p++)
�0�2 {
�0�2 sum[t] = p;
�0�2 sum[t+1] = end-p;
�0�2 �0�2
�0�2 fenjie(p,t+1,sum[t+1],sum); /*方法是从当前结点扩展开出,递归进行求解*/
�0�2 }
�0�2 }
�0�2 �0�2
}
int main(void)
{
�0�2 int i,j,sum[MAX] = {0};
�0�2
�0�2 �0�2
�0�2 scanf("%d %d",&n,&k);
�0�2 �0�2
�0�2 for(i=1 ; i<=n/2 ; i++)
�0�2 {
�0�2 sum[1] = i ;
�0�2 sum[2] = n-i;
�0�2 �0�2
�0�2 fenjie(i,2,sum[2],sum);
�0�2 }
�0�2 printf("%ld ",total);/*output the result*/
�0�2 �0�2
�0�2 �0�2
�0�2 return 0 ;
}
⑵ C语言经典100例问题,取一个整数a从右端开始的4~7位,求助,高分!
移位操作是按二进制算的, 右移 一下相当于除2,左移乘2,说以10进制的不能通过移位实现取位,2,8,16进制的都可以哦。
不过还是有办法,就是用16进制变量存你的10进制变量,然后按16进制移位取位,最后按16进制输出,可达到你想要的效果哦~
我要上课去了,如代码还是写不出来,追问一下,我回来帮你写个
⑶ c语言函数调用例子
C语言中,函数调用的一般形式为:函数名(实际参数表)
对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。各实参之间用逗号分隔。
在C语言中,可以用以下几种方式调用函数:
1、函数表达式:函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例如:z=max(x,y)是一个赋值表达式,把max的返回值赋予变量z。
2、函数语句:函数调用的一般形式加上分号即构成函数语句。例如: printf ("%d",a);scanf ("%d",&b);都是以函数语句的方式调用函数。
3、函数实参:函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。