华为笔试:直角三角形个数

题目描述:

给定三角形周长p,求满足边长为整数且周长为p的直角三角形个数。

思路分析:

枚举的思想。首先想到就是利用一个双重循环:

for(int i=1; i<p; i++)
{
    for(int j=i; j<p; j++)
    {
        int k = p-i-j;
        if(i*i+j*j==k*k)
            ans++;
    }
}

但这样是会超时的,通过数学方式做分析:

i+j+k=p, 0<i<=j<k, 通过解不等式,可以得到:i<p/3, j<p/2。

在双重循环的基础上,做限制,能够通过,但仍可以进一步优化。

一重循环:

考虑两个方程:

i+j+k=p, i^2+j^2 = k^2。

j = p-p^2/(2p-2i)。

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<vector>
 4 using namespace std;
 5
 6 int main(){
 7     int p;
 8     cin>>p;
 9     int ans=0;
10     for(int i=1; i<p/3; i++)
11     {
12         double j=p-(double)p*p/(2*p-2*i);
13         if(i<j && j-(int)j<1e-5)
14         {
15             ans++;
16         }
17     }
18     cout<<ans<<endl;
19     return 0;
20
21 }

原文地址:https://www.cnblogs.com/LJ-LJ/p/11426849.html

时间: 2024-08-30 05:58:02

华为笔试:直角三角形个数的相关文章

华为初级——字符个数统计(三种情况)

第一种情况: 描述:写出一个程序,接受一个有字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数.不区分大小写. 知识点:字符串,函数,指针   题目来源:内部整理   练习阶段:初级   运行时间限制:10Sec  内存限制:128MByte  输入:输入一个有字母和数字组成的字符串,和一个字符.   输出:输出输入字符串中含有该字符的个数.  样例输入: ABCDEF A                    样例输出: 1 源程序: #include<iostream>

华为笔试:计算字符个数

题目描述 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数.不区分大小写. 输入描述: 输入一个有字母和数字以及空格组成的字符串,和一个字符. 输出描述: 输出输入字符串中含有该字符的个数. 示例1 输入 ABCDEF A 输出 1 这道题可以说是非常简单了.但是ctype库确实可以多了解一下,有些时候空间可以节省很多时间isdigit(x):判断x是否为数字 isalnum() 用来判断一个字符是否为英文字母或数字,相当于 isalpha

华为笔试练习题----解析9进制,11进制的字符串为10进制的数字输出

                                                                              解析9进制,11进制的字符串为10进制的数字输出 描述: 解析9进制,11进制的字符串为10进制的数字输出,输入的字符串有效位(0v0012345678)长度不超过8位,前面的00不算做有效位.解析后以10进制的数字输出.如果解析到非法字符串则返回-1 9进制: 9进制的数的范围:0,1,2,3,4,5,6,7,8 9进制的开始为:0V或者0

华为笔试算法题1

三道题目基本上都和字符串操作相关. 1. 给定一组元素个数不定的字符串数组,每个字符串的长度不定:请统计出该字符串数组中的英文字母子串.数字子串和其他字符子串的总数: 输出为以","符号分隔3个数值,分别代表英文字母子串.数字子串和其他字符子串的数量: 实现时无需考虑非法输入. 输入描述:输入为:字符串数组 例子:abcd1244!! BKMKLK0987% 输出描述:输出为以","符号分隔3个数值,分别代表英文字母子串.数字子串和其他字符子串的数量. 输入例子:a

华为笔试-嵌入式开发(一)

1)什么是预编译,何时需要预编译: 答案: 1.总是使用不经常改动的大型代码体. 2.程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项.在这种情况下,可以将所有包含文件预编译为一个预编译头. (2)char * const p      char const * p      const char *p 上述三个有什么区别? 答案: char * const p; //常量指针,p的值不可以修改 char const * p://指向常量的指针,指向的常量值不可以改 cons

字符串压缩--华为笔试

二.题目描述(40分):通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串.压缩规则:1.仅压缩连续重复出现的字符.比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".2.压缩字段的格式为"字符重复的次数+字符".例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz". 要求实现函数: voi

华为笔试

1.字符串重排 时间限制:C/C++ 1秒,其他语言 2s  空间限制:C/C++ 32768K,其他语言 65536K 题目描述 给你一个原始字符串,根据该字符串内每个字符出现的次数,按照ASCII码递增顺序重新调整输出.举例!假设原始字符串为:eeefgghhh 则每种字符串出现的次数分别是:(1)eee  3次:(2)f  1次:(3)gg  2次:(4)hhh  3次: 重排输出后的字符串如下:efghegheh 编写程序实现上述功能. 输入描述:eeefgghhh(原始字符串中仅可能出

华为笔试——C++括号匹配

题目:括号匹配 题目来源:https://blog.csdn.net/lizi_stdio/article/details/76618908 题目介绍:输入一个字符串,里面可能包含"()"." [  ] "." {  } "三种括号,要求程序判断这个字符串里的括号是否成对出现且嵌套关系正确,若成对出现且嵌套关系正确,或字符串中无括号出现时,输出True:否则输出False.无需考虑非法输入. 例: 输入: (1+4)/[(2+3)*4] 输出:

2020 春招 华为笔试 2月26日

时间是两个小时,总共三道编程题目. 第一道题目大意: 输入一个int类型的数,判断它的比特流中有多少个“010”,及第一个“101”的下标(这个下标是从低位向高位数的). 如:输入:21 输出   2 0 原因:21  二进制表示为  0000 0000 0000 0000 0000 0000 0001 0101    总共两个“101”(两个“101”可以重叠), 且第一个下标为0,第二个下标为2,所以返回2 0 提交代码如下 1 int main(){ 2 int num; 3 while(