第一届蓝桥杯 部分题

/*第一题,以下函数的功能是将任意整数进行因式分解,
请完成该程序的空缺使函数能够正常运算
#include<stdio.h>
void f(int n)
{
for(int i=2; i<n/2; i++)
{
if(n%i==0)
//———–(1)————
{
printf("%d ", i);
n = n / i;
}
 }
 if(n>1) printf("%d\n", n);
}
int main()
{
f(20);
return 0;
}
*/


/*第二题,以下函数的功能是将给定字符串进行倒序输出,
请完成该函数空缺部分。






#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    char* p = "abcdef";
    char* q = (char*)malloc(strlen(p)+1);
int len=strlen(p);
for(int i=0;i<len-1;i++)
q[len-i-2] = p[i+1];
    q[len-1] = p[0];
    q[len]="\0";
printf("%s\n", q);
return 0;
}
总结:指针就是数组 
*/


/*
第三题,(这题的题目到底是要干啥,本人到现在沿未明了,
数学学统计好,但可以确定原题给出的代码就是如此)


#include<stdio.h>


int f(int m, int n)
{
int a = 1;
int m1 = m;
while(m1>1)
a *= m1--;

int b = 1;
while(n>1)
b *= n--;
return a / b;
}


int main()
{
printf("%d\n",f(9,8));
return 0;
}
*/ 






/*
第四题,任意给出一个四位数,
把它重新组成一个四位的最大数和一个最小数,
算出两者间的差。
例如:3721这个数,可以重组成:7321和1237,相数之差为7321-1237
请完善下面这个函数,以实现此功能


#include<stdio.h>
int f(int n)
{
int N[4];
for(int i=0; i<4; i++)
{
N[3-i] = n % 10;
n/=10;
}
for(int i=0; i<3; i++)
{
for(int j=0; j<3-i; j++)
if(N[j]>N[j+1])
{
int t = N[j+1];
N[j+1] = N[j];
N[j] = t;
}
}


int n_min=0;
for(int i=0; i<4; i++)
 n_min = n_min * 10 + N[i] ;
int n_max = 0;
for(int i=3; i>=0; i--)
 n_max = n_max * 10 + N[i];
 
 
 printf("%d %d\n",n_max,n_min);
return n_max-n_min;
}
int main()
{
printf("%d\n",f(3721));
return 0;
}
*/


/*
第五题,假设有m+n个人,其中,
m个人手持面额为5角的硬币,
n个人手持面额为1元的硬币,
他们都要乘车买票,
现假设售票员手中无零钞,
票价为5角,
下面这个函数就可以算出这m+n个人所有可能的买票情况,
请完善此函数。
//m: 持有5角币的人数
//n: 持有1元币的人数
//返回:所有顺利完成购票过程的购票次序的种类数*/
#include<stdio.h>


int f(int m, int n)
{
if(m < n) return 0;
 if(n==0) return 1;
return f(m-1,n)+f(m,n-1);
}
int main()
{

return 0;
}





































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值