| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 189 人关注过本帖
标题:求教:判断三个整数是否相邻
只看楼主 加入收藏
qtc2018
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2019-1-30
结帖率:0
  已结贴   问题点数:20  回复次数:5   
求教:判断三个整数是否相邻
如题
2019-01-30 16:14
qtc2018
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2019-1-30
  得分:0 
#include<iostream>
using namespace std;
int main(){
int a,b,c,t;
cin>>a>>b>>c;
    if(b>a){
        t=a;
        a=b;
        b=t;
    }
    if(c>b){
        t=b;
        b=c;
        c=t;
    }
        if(b>a){
        t=a;
        a=b;
        b=t;
    }
    if(a-2==b-1==c&&a+b+c==a*3||a+b+c==b*3||a+b+c==c*3)
{

        cout<<"TRUE";
    }else{
    cout<<"FALSE";
    }
    return 0;
}
不知道哪里错了
2019-01-30 16:18
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:373
帖 子:12996
专家分:50319
注 册:2012-10-18
  得分:7 
找出最小数  找出最大数 看看差值是否是2

DO IT YOURSELF !
2019-01-30 16:20
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:373
帖 子:12996
专家分:50319
注 册:2012-10-18
  得分:0 
回复 2楼 qtc2018
程序代码:

#include<iostream>

using namespace std;

int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    if(a+b+c==a*3||a+b+c==b*3||a+b+c==c*3) cout<<"TRUE";
        else cout<<"FALSE";
    return 0;
}

DO IT YOURSELF !
2019-01-30 16:58
幽竹烟雨
Rank: 2
来 自:SunGalaxy
等 级:论坛游民
威 望:2
帖 子:35
专家分:68
注 册:2018-11-9
  得分:7 
用了STL里的排序函数——sort,sort真的很方便
#include<bits/stdc++.h>//万能头文件,不过并不包括<windows.h>库等好玩的东西
using namespace std;
int a[3];//用数组操作
int main()
{
    ios::sync_with_stdio(false);//个人习惯,您可以选择注释掉它
    cin>>a[0]>>a[1]>>a[2];//输入三个数
    sort(a,a+2);//这个函数的作用是将a[0~2] 的数按从小到大排序
    if(a[0]==a[1]-1&&a[0]==a[2]-2&&a[1]==a[2]-1) cout<<"TRUE";//看得懂上面的注释,这个您应该能理解
    else cout<<"FALSE";//反之
    return 0;
}
2019-01-30 22:28
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:285
帖 子:6086
专家分:35030
注 册:2011-1-18
  得分:7 
你本身的思路是正确的,就是最后那个 if(a-2==b-1==c&&a+b+c==a*3||a+b+c==b*3||a+b+c==c*3) 不知所云,难道不应该是 if( c+1==b && b+1==a ) 吗?也就是
程序代码:
bool foo( int a, int b, int c )
{
    if( a > c )
        std::swap( a, c );
    if( b > c )
        std::swap( b, c );
    if( a > b )
        std::swap( a, b );
    return a+1==b && b+1==c;
}



用数学思路来思考,有三个自由量,那么取三个等式就可以确定下来,例如
bool foo( int a, int b, int c )
{
    int p = a+b+c;
    int q = a*b*c;
    int r = a*a+b*b+c*c;
    return p*p*p==27*q+9*p && p*p+6==3*r;
}
当然,因为 a+b+c、a*b*c、a*a+b*b+c*c 都可能溢出,所以只能算是数学算法,不能变为计算机算法。
2019-01-31 09:20







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.073999 second(s), 9 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved