E - 小Z家的门牌号(进阶习题)
这道题很经典,遇见好几次了(虽说还是没记住。。。
小Z家住在一条短胡同里,这条胡同的门牌号从1开始顺序编号。
若其余各家的门牌号之和减去小Z家门牌号的两倍,恰好等于n,求小Z家的门牌号及总共有多少家。(有多解的情况下输出总家庭数最少的方案,题目肯定有解)
Input
一个正整数T(10<=T<=1000),表示一共有T组询问 接下来T行,每行一个整数n(0 <100000)Output输出一共T行,每行两个整数a b(用空格隔开,表示小Z家的门牌号及总共有多少家,有多解的情况下输出总家庭数最少的方案)
Sample Input
5 15 90 63 46 3
Sample Output
2 6 5 14 1 11 3 10 1 3
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
满分代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 long long n,m,sum=1; 6 cin>>m; 7 while(m--){ 8 cin>>n; 9 for(int i=2;;i++){ 10 sum+=i; 11 if((sum-n)%3==0 && (sum-n)>0){//因为是其余门牌号之和减2*小Z家门牌号,可以看成门牌号之和-3*小Z家门牌号,还要判断结果是否为正数 12 cout<<(sum-n)/3<<" "<<i<<endl; 13 break; 14 } 15 } 16 sum=1;//别忘了初始化sum 17 } 18 return 0; 19 }