zoukankan      html  css  js  c++  java
  • 7649:我家的门牌号

    总时间限制: 1000ms   内存限制: 65536kB
    描述

    我家住在一条短胡同里,这条胡同的门牌号从1开始顺序编号。

    若所有的门牌号之和减去我家门牌号的两倍,恰好等于n,求我家的门牌号及总共有多少家。

    数据保证有唯一解。

    输入
    一个正整数n。n < 100000。
    输出
    一行,包含两个正整数,分别是我家的门牌号及总共有多少家,中间用单个空格隔开。
    样例输入
    100
    样例输出
    10 15

    问题分析

      本题的用穷举法求解。

      假设总共有k家,我家门牌号为x,那么k(k+1)/2 -2x=n,得k(k+1)-2n=4x>=4(因为x>=1)。

      推导得:(k+1)(k+1) > k(k+1)>=4+2n,最后得:k>sqrt(4+2n)-1。

    程序说明

      程序中,尽量减少穷举的数量。

    代码一:

     1 #include <stdio.h>
     2 int main(int argc, char *argv[])
     3 {
     4     int k,n,x,sum=1;
     5     
     6     scanf("%d",&n);
     7     //n=100;
     8     for(k=2;k<=n;k++)
     9     {
    10         sum=sum+k;
    11         if(sum>n&&(sum-n)%2==0) {x=(sum-n)/2;break;}
    12     }
    13     printf("%d %d
    ",x,k);
    14     return 0;
    15 }

    代码二:

     1 #include <iostream>  
     2 #include <cmath>  
     3 using namespace std;  
     4 int main()  
     5 {  
     6     int n, mink, x,k;  
     7   
     8     cin >> n;  
     9   
    10     mink = sqrt(4 + 2 * n) - 1;  
    11   
    12     for(k=mink+1; ;k++)
    13     {  
    14         if((k * k + k- 2 * n) % 4 == 0)
    15         {  
    16             x = (k * k + k - 2 * n) / 4;  
    17             if(x <= 0)  
    18                 continue;  
    19             cout << x << " " << k<< endl;  
    20             break;  
    21         }  
    22     }  
    23   
    24     return 0;  
    25 } 
  • 相关阅读:
    个人网站
    物理读,逻辑读,预读
    正则表达式
    面向对象五大基本原则
    工作总结
    sql性能优化
    sqlServer游标的使用
    ASP.NET安全[开发ASP.NET MVC应用程序时值得注意的安全问题](转)
    一个简单问题引发对IEnumerable和IQueryable的思考
    EFCodeFirst 各种命令整理
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/7289285.html
Copyright © 2011-2022 走看看