我家的门牌号(2024.3三级)

题目

我家住在一条短胡同里, 这条胡同的门牌号从1开始顺序编号。
若所有的门牌号之和减去我家门牌号的两倍,恰好等于n,求我家的门牌号及总共有多少家。
数据保证有唯一解。
时间限制: 1000
内存限制: 65536

输入

一个正整数n。n < 100000。

输出


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

样例输入


100

样例输出

10 15

解题思路

首先输入头文件,使用<bits/stdc++.h>万能头文件,当然,这道题不难,可以直接使用<iostream>,使用命名空间,调用主函数。

#include<bits/stdc++.h>
using namespace std;
int main()

根据题目要求,输入一个正整数,于是定义int n,并输入cin>>n(图中其他变量后面会用到)。

int n,a=0;
cin>>n;

由于我们并不知道这条街上有多少户,“我”也不知道住在第几号,所以可以采用“暴力枚举”的方式解题。首先如上图所示,定义一个名为“a”以0开始的int变量代表一共有a户。不知道会有多少户,就可以用while(true)或者while(1)进行循环。while下的第一个用a++递增a,假设这时a是0,就会变成1,代表一共有1户人家。题目中有特殊要求:若所有的门牌号之和减去我家门牌号的两倍,恰好等于n。就在循环中定义:int sum=0这样也可以让每次循环,sum重新定义并归零。

while(true){
		a++;
		int sum=0;
		\\\\
	}

开始循环嵌套,定义i为循环变量,代表第i户,随机任意一个i都会小于总的户数,所以i<=a;i++。在循环内部,写上sum+=i,让i的每个值都加入到sum中。

for(int i=1;i<=a;i++)
			sum+=i;

开始另外一个while内部的循环,这次的循环变量i代表“我”住的门牌号,从1开始,并且永远小于总的户数,并且递增,所以for(int i=1;i<=a;i++)。内部是一个if判断,根据题目中的条件“若所有的门牌号之和减去我家门牌号的两倍,恰好等于n”写出if(sum-i*2==n),如果判断成功,将输出“我”的门牌号i,一个空格再加上总的户数,最后return 0结束程序。如果没有符合该判断,将再次i++,测试下一个i是否合适,当i超过a的时候,开始下一次的while循环。成品如下:

代码展示

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

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值