Problem1 小蓝鲸购物
描述
小蓝鲸打算从n件不同的商品中选出r件购买,请计算小蓝鲸选择方式的总数
输入
正整数n和r(0<= r <= n <= 12)
输出
一个整数,代表小蓝鲸选择方式的总数
参考代码:
# include <stdio.h>
int factorial( int n ); //声明阶乘函数
int main(void)
{
int n, r;
scanf( "%d %d", &n, &r );
int x;
x = factorial( n )/( factorial( n-r )*factorial( r ) ); //通过排列组合公式计算可能的数量
printf("%d\n" ,x );
return 0;
}
int factorial( int n ) //定义阶乘函数
{
int i, sum=1;
for( i=1; i<=n; i++ ){
sum *= i;
}
return sum;
}
注:使用了排列组合公式:nCr = n!/r!(n-r)!
Problem2 小蓝鲸玩游戏
描述
小蓝鲸最近在玩某文字推理(划掉)动作游戏,但是很悲惨的是,小蓝鲸手残,每次只能看着瞄准的准星乱飘,然后悲惨地面对自己的失败
所以小蓝鲸打算写一个程序自动瞄准,但是不知道目标区域的面积。它会给你A、B、C三个矩形区域的数据,其中A是包含关键目标的区域,B和C都是干扰的杂音区域,换言之只有A中未被B或者C覆盖的区域才属于目标区域。
你需要帮小蓝鲸算出目标区域的面积,为了简化问题,所有矩形的边都平行于x轴或者y轴
输入
依次输入A、B、C三个矩形的信息,每一组矩形包含<左上-右下>对角线两个端点的坐标,数字都会由空格隔开,保证输入的坐标符合几何图形的规范
输入的坐标值都是整型
example1
1 1 2 0 // A((1, 1), (2, 0))
2 3 4 1 // B((2, 3), (4, 1))
3 3 7 0 // C((3, 3), (7, 0))
输出
1
参考代码:
# include <stdio.h>
int main()
{
int x[6], y[6];
int i;
for( i=0; i<6; i++){
scanf( "%d", &x[i] );
scanf( "%d", &y[i] ); //读取数据并存于数组中
}
int num1 = x[1] - x[0];
int num2 = y[0] - y[1];
double m[num1][num2];
double n[num1][num2]; //定义二重数组
int j, k;
for( j=0; j<num1; j++ ){
for( k=0; k<num2; k++ ){
m[j][k] = x[0] + 0.5 + j;
n[j][k] = y[0] - 0.5 - k; //通过二重数组存储每一方格的中间位置坐标
}
}
int cnt=0 ;
for( j=0; j<num1; j++ ){
for( k=0; k<num2; k++ ){
if( m[j][k]>x[2] && m[j][k]<x[3] && n[j][k]>y[3] && n[j][k]<y[2]){
}
else if( m[j][k]>x[4] && m[j][k]<x[5] && n[j][k]>y[5] && n[j][k]<y[4]){
}
else{
cnt++; //判断中间位置坐标是否在BC两个方块的范围之内,若不在,则面积+1
}
}
}
printf( "%d", cnt ); //输出面积
return 0;
}
注:这就真的是参考代码了/doge
用了数组和二重数组代表位置,并通过是否包含每一块面积的中间点的坐标代表这一块位置的面积,这是因为输入的都是整型数;如果对于非整形数据则此代码错误。
声明:
本专栏为2022春 南哪大学 程序设计基础 课程作业,答案为po主本人初次提交时所写,OJ判定满分,但非老师给出的参考答案,侵删。
本次为优化阅读体验,给出注释。有问题可在评论区写出,有空会解答或另写补充。