OJ.1180.判断三角形形状

多组测试数据。每组测试数据共九个整数。

每三个整数表示三角形一个顶点的坐标. 

Big 表示钝角三角形、Middle 表示直角三角形、Small 表示锐角三角形、None 表示无法构成三角形

--------

1 2 3 4 5 6 7 8 9

--------

None

-------

#include<stdio.h>
#include<math.h>
int main()
{
     double a,b,c,d,e,f,j,h,o,l,m,v;
    while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f,&j,&h,&o)!=EOF)
    {
        l=(a-d)*(a-d)+(b-e)*(b-e)+(c-f)*(c-f);
        m=(a-j)*(a-j)+(b-h)*(b-h)+(c-o)*(c-o);
        v=(d-j)*(d-j)+(e-h)*(e-h)+(f-o)*(f-o);
        double max1=l,max2=m,max3=v;
        if(l<m) max1=m,max2=l;
        else if(max1<v) 
        {
            max3=max1;
            max1=v;
        }
        if(sqrt(max1)>=sqrt(max2)+sqrt(max3)) 
        {
            printf("None\n");
                continue;
        }
        else if(max1==max2+max3)
        {
            printf("Middle\n");
              
        }
        else if(max1>max2+max3)
        {
            printf("Big\n");
             
        }
        else if(max1<max2+max3)
        {
            printf("Small\n");
        }
    }
    return 0;
}


#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include "sys.h" #include "adc.h" #include "tim.h" #include "usart.h" #include "delay.h" #include "Key.h" #include "led.h" #include "oled.h" #define TASK_NUM_MAX (sizeof(g_tcb_tab) / sizeof(g_tcb_tab[0])) #define current_aj 3.86554 //电流增益系数 电流值不对改这个数 int str_num(uint8_t *buff); int Dis_get(uint8_t *buff); uint8_t Rx_buff[256]; // 接收缓冲区 uint8_t Rx_index[4]; // 接收缓冲区索引 uint32_t ADC_SUM; // ADC采集的总值 用于均值滤波 int ADC_index; // ADC采集索引 用于均值滤波 int ADC_COJ; int adc_real; // 均值滤波后的ADC值 int adcx1,adcx2,adcx3,adcx4; //AD转换的结果 float adc1,adc2,adc3,adc4; uint8_t stay_flag; float adc_out; //电流值 void usart1_send(void); void Led(void); char send_buff[256]; char Dis_buff[6]; char R_buff[6]; char T_buff[6]; char Q_buff[6]; u8 buff1 = 0; uint8_t TTS_FLAG[3]; float dis_data; uint8_t KeyNum; float R_data; float T_data; float Q_data; typedef struct { uint8_t run; // 调度标志,1:调度,0:挂起 uint16_t time_count; // 时间片计数值 uint16_t time_reload; // 时间片重载值 void (*p_task_callback)(void); // 函数指针变量,用来保存业务功能模块函数地址 } st_tcb_t; static st_tcb_t g_tcb_tab[] = { {0,500,500,Led}, {0,200,200,usart1_send}, /* 添加业务功能模块 */ }; /*******测试用*******/ int i; typedef enum{ D_flag, Q_flag, R_flag, T_flag, mnot, }Rx_flag; typedef enum { SHAPE_RECTANGLE, // 矩形 SHAPE_TRIANGLE, // 三角形 SHAPE_CIRCLE // 圆形 } Shape_Type; enum { jichu = 0xE1, fahui = 0xE2, xuanzhan= 0xE3, zuixiao = 0xE4, basic, }; uint8_t page = jichu; Shape_Type myShape; Rx_flag rx_flag = mnot; void Led(){ buff1 = 0; } void task_handler(void) { for (uint8_t i = 0; i < TASK_NUM_MAX; i++) { if (g_tcb_tab[i].run) // 判断时间片标志 { g_tcb_tab[i].run = 0; // 标志清零 g_tcb_tab[i].p_task_callback(); // 执行调度业务功能模块 } } } void task_schedule_callback(void) { for (uint8_t i = 0; i < TASK_NUM_MAX; i++) { if (g_tcb_tab[i].time_count) { g_tcb_tab[i].time_count--; if (g_tcb_tab[i].time_count == 0) { g_tcb_tab[i].run = 1; g_tcb_tab[i].time_count = g_tcb_tab[i].time_reload; } } } } static float last_dis_data = -1.0f; static float last_Q_data = -1.0f; static int last_adc_real = -1; void usart1_send(void) { if (fabsf(dis_data - last_dis_data) < 0.1f && fabsf(Q_data - last_Q_data) < 0.1f && abs(adc_real - last_adc_real) < 5) { return; } last_dis_data = dis_data; last_Q_data = Q_data; last_adc_real = adc_real; switch(page) { case jichu: sprintf(send_buff, "%.1f CM", dis_data); printf("t2.txt=\"%s\"\xFF\xFF\xFF", send_buff); sprintf(send_buff, "%.1f CM", Q_data); printf("t4.txt=\"%s\"\xFF\xFF\xFF", send_buff); if (rx_flag == R_flag) { printf("t6.txt=\"SHAPE_CIRCLE\"\xFF\xFF\xFF"); } else if (rx_flag == T_flag) { printf("t6.txt=\"SHAPE_TRIANGLE\"\xFF\xFF\xFF"); } else if (rx_flag == Q_flag) { printf("t6.txt=\"SHAPE_RECTANGLE\"\xFF\xFF\xFF"); } sprintf(send_buff, "%.1f W", (float)adc_real * current_aj * 5.0f / 1000.0f); printf("t6.txt=\"%s\"\xFF\xFF\xFF", send_buff); sprintf(send_buff, "%.2f mA", (float)adc_real * current_aj); printf("t8.txt=\"%s\"\xFF\xFF\xFF", send_buff); break; case zuixiao: case xuanzhan: sprintf(send_buff, "%.1f CM", dis_data); printf("t10.txt=\"%s\"\xFF\xFF\xFF", send_buff); sprintf(send_buff, "%.1f CM", Q_data); printf("t11.txt=\"%s\"\xFF\xFF\xFF", send_buff); sprintf(send_buff, "%.1f W", (float)adc_real * current_aj * 5.0f / 1000.0f); printf("t12.txt=\"%s\"\xFF\xFF\xFF", send_buff); sprintf(send_buff, "%.2f mA", (float)adc_real * current_aj); printf("t13.txt=\"%s\"\xFF\xFF\xFF", send_buff); break; default: break; } } /** * @brief 串口1接收中断服务函数 * */ u8 buff; int aa; void usart1_Rx_IRQ(uint8_t c) { switch(c) { case 0xC1 : page = jichu; break; case 0xC2 : page = fahui; break; case 0xA1 : page = zuixiao; USART_printf(USART2,"detectminQuad"); break; case 0xA2 : page = xuanzhan; USART_printf(USART2,"tilt"); break; case 0xC5 : page = basic; USART_printf(USART2,"basic"); break; default: break; } } // 全局变量(用于临时拼接数字) int temp_value = 0; // 临时存储解析出的数值 int digit_count = 0; // 记录接收到了几位数字 void usart2_Rx_IRQ(uint8_t c) { static Rx_flag current_flag = mnot; // 当前接收的数据类型 static Shape_Type current_shape = SHAPE_RECTANGLE; // ===== 1. 检测数据类型标志 ===== if (c == 'D') { current_flag = D_flag; temp_value = 0; digit_count = 0; return; } else if (c == 'R') { current_flag = R_flag; current_shape = SHAPE_CIRCLE; temp_value = 0; digit_count = 0; // 立即播报 USART_printf(USART3, "圆形"); return; } else if (c == 'T') { current_flag = T_flag; current_shape = SHAPE_TRIANGLE; temp_value = 0; digit_count = 0; USART_printf(USART3, "三角形"); return; } else if (c == 'Q') { current_flag = Q_flag; current_shape = SHAPE_RECTANGLE; temp_value = 0; digit_count = 0; USART_printf(USART3, "矩形"); return; } // ===== 2. 接收数字字符(0-9)===== if (c >= '0' && c <= '9') { temp_value = temp_value * 10 + (c - '0'); digit_count++; return; } // ===== 3. 遇到换行符 \n,表示一帧数据结束,开始处理 ===== if (c == '\n' && digit_count > 0) { float final_value = (float)temp_value / 10.0f; // 转换为带一位小数的值 // ===== 根据当前 flag 更新对应变量并刷新屏幕 ===== switch (current_flag) { case D_flag: dis_data = final_value; // 直接刷新串口屏 t2 sprintf(send_buff, "%.1f CM", dis_data); printf("t2.txt=\"%s\"\xFF\xFF\xFF", send_buff); break; case Q_flag: case R_flag: case T_flag: Q_data = final_value; // 刷新形状文本 const char* shape_str = (current_shape == SHAPE_CIRCLE) ? "SHAPE_CIRCLE" : (current_shape == SHAPE_TRIANGLE) ? "SHAPE_TRIANGLE" : "SHAPE_RECTANGLE"; printf("t6.txt=\"%s\"\xFF\xFF\xFF", shape_str); // 刷新边长/直径 sprintf(send_buff, "%.1f CM", Q_data); printf("t4.txt=\"%s\"\xFF\xFF\xFF", send_buff); break; default: break; } // ===== 重置状态 ===== temp_value = 0; digit_count = 0; current_flag = mnot; } } int main(void) { delay_init(); // 延时函数初始化 LED_Init(); // 初始化与外设连接的硬件接口 uart1_init(9600); // 串口初始 uart3_init(9600); // 串口初始 uart2_init(115200); // 串口初始化 Adc_Init(); // ADC转换初始化 tim2_init(100-1,72-1); // 定时器初始化 tim4_init(1000-1,72-1); // 定时器初始化 Key_Init(); // 设置初始页面为 jichu page = jichu; // 发送页面切换指令给串口屏 printf("page jichu\xFF\xFF\xFF"); sprintf(send_buff,"%.1f CM",0.00); printf("t2.txt=\"%s\"\xFF\xFF\xFF",send_buff); sprintf(send_buff,"%.1f CM",0.00); printf("t4.txt=\"%s\"\xFF\xFF\xFF",send_buff); printf("t5.txt=\"%s\"\xFF\xFF\xFF","功率:"); while(1) { task_handler(); KeyNum = Key_GetNum(); if (KeyNum == 1) { page = basic; USART_printf(USART2, "basic"); printf("page page1\xFF\xFF\xFF"); sprintf(send_buff, "%.1f CM", dis_data); printf("t2.txt=\"%s\"\xFF\xFF\xFF", send_buff); // 更新文本控件 t2 // sprintf(send_buff, "%.1f CM", Q_data); // printf("t4.txt=\"%s\"\xFF\xFF\xFF", send_buff); if (rx_flag == R_flag) { printf("t4.txt=\"SHAPE_CIRCLE\"\xFF\xFF\xFF"); } else if (rx_flag == T_flag) { printf("t4.txt=\"SHAPE_TRIANGLE\"\xFF\xFF\xFF"); } else if (rx_flag == Q_flag) { printf("t4.txt=\"SHAPE_RECTANGLE\"\xFF\xFF\xFF"); } sprintf(send_buff, "%.1f W", (float)adc_real * current_aj * 5.0f / 1000.0f); printf("t6.txt=\"%s\"\xFF\xFF\xFF", send_buff); sprintf(send_buff, "%.2f mA", (float)adc_real * current_aj); printf("t8.txt=\"%s\"\xFF\xFF\xFF", send_buff); break; // LED1_Turn(); } if (KeyNum == 2) { printf("page page0\xFF\xFF\xFF"); // LED2_Turn(); } } } void tim4_IRQ(void) //中断函数入口,从tim.c里面调用的这个函数 { task_schedule_callback(); } void tim2_IRQ(void) //中断函数入口,从tim.c里面调用的这个函数 { adcx1 = GET_ADC_PA1; //获取ADC偏移量 adcx2 = GET_ADC_PA0; //获取ADC采集量 ADC_COJ = adcx2 - adcx1; ADC_index++; if(ADC_index > 1000){ ADC_index = 0; adc_real = (ADC_SUM+500) / 1000; //四舍五入 ADC_SUM = 0; } else{ ADC_SUM += ADC_COJ; } } int i,j; int Dis_get(uint8_t *buff){ int a,b,c,d; //临时变量,记录千位百位十位个位数字 a = (buff[1] - '0')*1000; b = (buff[2] - '0')*100; c = (buff[3] - '0')*10; d = buff[4] - '0'; return a+b+c+d; } int str_num(uint8_t *buff){ int a,b,c,d; //临时变量,记录千位百位十位个位数字 if(buff[3]!=0x00){ a = (buff[1] - '0')*100; b = (buff[2] - '0')*10; c = (buff[3] - '0')*1; } else { a = (buff[1] - '0')*10; b = (buff[2] - '0')*1; c = 0; } return a+b+c+d; }
最新发布
08-03
hustoj.iso 是一个软件系统镜像文件。Hustoj一个开源的在线评测系统,它被广泛应用于大学和高中的程序设计教学中。该系统的目标是提供一个方便使用的在线评测和训练环境,使学生能够提交他们的程序代码,并获得即时的评测结果。 hustoj.iso 是Hustoj的系统镜像文件,可以用来部署Hustoj系统。通过将hustoj.iso 文件安装到服务器上,就可以建立一个运行Hustoj系统的评测服务器。用户可以通过web界面访问该服务器,并提交自己的程序代码进行评测。 hustoj.iso 是一个基于Ubuntu操作系统的镜像文件。它集成了所有Hustoj系统所需要的软件和依赖项,并进行了预配置,使得安装和部署变得更加简单。用户只需要将hustoj.iso文件写入到U盘或光盘中,然后引导服务器从U盘或光盘启动,就可以开始安装Hustoj系统了。 使用hustoj.iso 部署Hustoj系统,可以为学生提供一个良好的在线评测环境,帮助他们进行程序设计的学习和训练。学生可以在该系统中提交自己的程序代码,并获得详尽的评测结果,包括运行时间、内存消耗、错误信息等等。同时,Hustoj还具有包括代码分享、竞赛组织等其他功能,能够满足不同需求的学生。 总之,hustoj.iso 是一个用于部署Hustoj系统的镜像文件,通过安装hustoj.iso,可以搭建一个功能完善、易用的在线评测环境,为程序设计学习提供有力的支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值