给出直角三角形其中一条边的长度n,你的任务是构造剩下的两条边,使这三条边能构成一个直角三角形。
输入描述:
一个整数n。
输出描述:
另外两条边b,c。答案不唯一,只要输出任意一组即为合理,如果无法构造请输出-1。
示例1
输入
3
输出
4 5
示例2
输入
4
输出
3 5
思路:当n是奇数总存在两条边b,c使得c-b=1并且n^2+ b^2= c^2
当n是偶数总存在两条边b,c使得c-b=2并且n^2+ b^2= c^2
可以用公式直接求出一边
#include<iostream>
using namespace std;
int main(){
long long n,b,c;
cin>>n;
if(n%2!=0){//奇数
c=(n*n-1)/2;
b=c+1;
}
else{
b=(n*n)/4+1;
c=b-2;
}
if(b==0||c==0) cout<<"-1"<<endl;
else cout<<c<<" "<<b<<endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
long long n;
long long hh, mm, ss;
cin >> n;
n = n / 1000; //舍去毫秒.
n = n % 86400; //舍去年月日.
hh = n / 3600; //计算时.
n = n - hh * 3600;
mm = n / 60;
ss = n % 60;
if (hh < 10) {
cout << 0 << hh << ':';
}
else {
cout << hh << ':';
}
if (mm < 10) {
cout << 0 << mm << ':';
}
else {
cout << mm << ':';
}
if (ss < 10) {
cout << 0 << ss;
}
else {
cout << ss ;
}
return 0;
}
搞了个大数和
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[220],b[220];
int i,j,p[2200]={0};
cin>>a>>b;
int len1=strlen(a);
int len2=strlen(b);
for(i=0;i<len1;i++)
{
for(j=0;j<len2;j++)
{
p[i+j]+=(a[len1-i-1]-'0')*(b[len2-j-1]-'0');
}
}
for(i=0;i<len1+len2;i++)
{
if(p[i]>=10)
{
p[i+1]+=p[i]/10;
p[i]%=10;
}
}
while(p[i]==0)
i--;
while(i>=0)
cout<<p[i--];
}