0
点赞
收藏
分享

微信扫一扫

2022春 南哪大学 程序设计基础 OJ答案参考(4)

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 1 2 0 // A((1, 1), (2, 0))
  2. 2 3 4 1 // B((2, 3), (4, 1))
  3. 3 3 7 0 // C((3, 3), (7, 0))

输出

  1. 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判定满分,但非老师给出的参考答案,侵删。

本次为优化阅读体验,给出注释。有问题可在评论区写出,有空会解答或另写补充。

举报

相关推荐

0 条评论