zoukankan      html  css  js  c++  java
  • A problem is easy http://acm.nyist.net/JudgeOnline/problem.php?pid=216

     

    A problem is easy

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
     
    描述
    When Teddy was a child , he was always thinking about some simple math problems ,such as “What it’s 1 cup of water plus 1 pile of dough ..” , “100 yuan buy 100 pig” .etc..

    One day Teddy met a old man in his dream , in that dream the man whose name was“RuLai” gave Teddy a problem :

    Given an N , can you calculate how many ways to write N as i * j + i + j (0 < i <= j) ?

    Teddy found the answer when N was less than 10…but if N get bigger , he found it was too difficult for him to solve.
    Well , you clever ACMers ,could you help little Teddy to solve this problem and let him have a good dream ?
     
    输入
    The first line contain a T(T <= 2000) . followed by T lines ,each line contain an integer N (0<=N <= 10^11).
    输出
    For each case, output the number of ways in one line
    样例输入
    2
    1
    3
    样例输出
    0
    1
    上传者
    苗栋栋
    #include<stdio.h>
    int main()
    {
    	int n;
    	scanf("%d",&n);
    	while(n--)
    	{
    		long int i,j,m,count=0;
    		scanf("%d",&m);
    		if(m==1||m==0)
    			printf("%d
    ",0);
    		else
    		{
    			for(i=1;i*i<=m;i++)
    			{
    				if((m+1)%(i+1)==0)
    				{
    					j=(m+1)/(i+1)-1;
    					if(i<=j)
    						count++;
    				}
    			}
    			printf("%d
    ",count);
    		}
    	}
    	return 0;
    }
    

    这一题不能用两个for循环遍历求解,那样会超时,我们来看一下,N=i*j+i+j,两边同时加1,N+1=i*(j+1)+j+1=(i+1)*(j+1);所以我们只要有(N+1)%(i+1)==0;就可以确定一个j,要注意的是i小于j.

  • 相关阅读:
    vim字体设置
    windows下eclipse打不开
    ubuntu的无线网无法连上
    将ubuntu系统录到u盘上
    使用UltraISO刻录系统到U盘可能会出现打不开的情况
    windows安装程序制作
    安装ubuntu双系统
    数据库插入数据时间比较
    LeetCode 189. Rotate Array
    LeetCode 228. Summary Ranges
  • 原文地址:https://www.cnblogs.com/wangyouxuan/p/3248969.html
Copyright © 2011-2022 走看看