huangzijia20 2024-01-27 22:01 采纳率: 100%
浏览 77
已结题

我家的门牌号 我家住在一条硬胡百里这条胡同的门牌号从1开始,顺序编号。 若所有的门牌号之和减去我家门牌号的两倍正好等于 n ,求我家的门牌号及总共有多少家。 数据保证有唯一解

我家的门牌号
题目描述
我家的门牌号 我家住在一条硬胡百里这条胡同的门牌号从1开始,顺序编号。 若所有的门牌号之和减去我家门牌号的两倍正好等于 n ,求我家的门牌号及总共有多少家。 数据保证有唯一解。

输入
一个正整数n 。n <=100000 。

输出
一行,包含两个正整数分别是我家的门牌号及总共有多少家,中间用单个空格调开。

样例
输入复制
100
输出复制
10 15

自己的c++代码:

#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
    int sum=0,house_number=1;
    cin>>n;
    while(1)
    {
        sum+=house_number;
        if(sum-house_number*2==n)
        {
            cout<<sum<<" "<<house_number;
            return 0;
        }
        house_number++;
    }
    cout<<sum<<" "<<house_number;
    return 0;
}

使用思路:枚举
使用操作系统:Windows 11
使用编辑器:c++5.11
使用语言:c++

  • 写回答

3条回答 默认 最新

  • 叫兽-郭老师 新星创作者: Java技术领域 2024-01-27 22:28
    关注

    首先,你的思路和演算法是正确的,但在代码实现上有一些小错误,也许这就是你为什么没有获得预期结果的原因。
    首先,你在while循环中两次输出结果,只需要保留你希望的一种情况即可。此外,你在找到答案后应该立即结束循环,这样可以避免不必要的计算。最后,你应该打印house_number而不是sum。
    对你的代码进行修改,如下所示:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        cin >> n;
        int sum = 0;
        int house_number = 1;
        while (true)
        {
            sum += house_number;
            if (2 * house_number == sum - n)
            {
                cout << house_number << " " << sum;
                return 0;
            } 
            house_number++;
        }
        return 0;
    }
    
    
    

    这段代码基于题目中的条件所有的门牌号之和减去我家门牌号的两倍正好等于 n,不断地增加house_number直到找到解。
    如有后续问题,欢迎提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月5日
  • 已采纳回答 1月28日
  • 创建了问题 1月27日