combo

连续自然数和

源程序名    combo.??? (pas,c,cpp)

可执行文件名   combo.exe

输入文件名   combo.in

输出文件名     combo.out

对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M。

例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个自然数段为M=10000的一个解。

输入

包含一个整数的单独一行给出M的值(10 <= M <= 2,000,000)。

输出

每行两个自然数,给出一个满足条件的连续自然数段中的第一个数和最后一个数,两数之间用一个空格隔开,所有输出行的第一个按从小到大的升序排列,对于给定的输入数据,保证至少有一个解。

样例

combo.in

10000

combo.out

18 142

297 328

388 412

1998 2002

思路:将m因数分解,在判断该对因数能否作为答案输出。

(问我为毛是因数,学过等差数列么……)

program t2;
type aa=record
    l,r:longint;
    end;
var m,i,sum:longint;
    f:array[1..2000000]of aa;
procedure pd(x,y:longint);
var c:longint;
begin
    if x mod 2=1 then
    begin
        if y mod 2=1 then
        begin
            c:=(y-1)div 2;
            if x>=c+1 then
            begin
                f[sum].l:=x-c;
                f[sum].r:=x+c;
                inc(sum);
            end;
            c:=y;
            if (x-1)div 2>=c then
            begin
                f[sum].l:=((x-1)div 2)+1-c;
                f[sum].r:=((x+1)div 2)-1+c;
                inc(sum);
            end;
        end;
        if y mod 2=0 then
        begin
            c:=y;
            if (x-1)div 2>=c then
            begin
                f[sum].l:=((x-1)div 2)+1-c;
                f[sum].r:=((x+1)div 2)-1+c;
                inc(sum);
            end;
        end;
    end;
    if x mod 2=0 then
    begin
        if y mod 2=1 then
        begin
            c:=(y-1)div 2;
            if x>=c+1 then
            begin
                f[sum].l:=x-c;
                f[sum].r:=x+c;
                inc(sum);
            end;
        end;
    end;
end;

procedure sort(l,r: longint);
var
    i,j,x: longint;
    y:aa;
begin

    i:=l;
    j:=r;
    x:=f[(l+r) div 2].l;
    repeat
        while f[i].l<x do
            inc(i);
        while x<f[j].l do
            dec(j);
        if not(i>j) then
        begin
            y:=f[i];
            f[i]:=f[j];
            f[j]:=y;
            inc(i);
            j:=j-1;
        end;
    until i>j;
    if l<j then
           sort(l,j);
    if i<r then
           sort(i,r);
end;

begin
    assign(input,‘combo.in‘);
    assign(output,‘combo.out‘);
    reset(input);
    rewrite(output);
    sum:=1;
    readln(m);
    for i:=2 to m-1 do
        if m mod i=0 then
             pd(i,m div i);
    if m mod 2=1 then
    begin
        inc(sum);
        f[sum].l:=(m-1)div 2;
        f[sum].r:=(m+1)div 2;
    end;
    sort(1,sum);
    for i:=2 to sum do
        writeln(f[i].l,‘ ‘,f[i].r);
    close(input);
    close(output);
end.

好像暴力枚举也可以。

时间: 2024-10-08 13:08:23

combo的相关文章

MFC控件使用技巧:Combo Box

1 AddString 和InsertString的区别 InsertString可以指定一个显示的排列的序号, 所有的字符串根据序号排列,AddString只是将 字符串添加到下拉列表,至于该字符串的位置 不得而知,而且添加字符串的时候,会影响以前 的序号. InsertString使用情形:需要默认指定某一个序号 的字符串显示,搭配SetCurSel,将字符串显示出来 2)是否允许编辑 Type 属性设置为Drop List 不允许编辑 Type 属性设置为DropDown 允许编辑 3)显

Google Combo Chart example with database in ASP.NET

Hide demo Download In this article I'm going to explain how to create Google combo chart example with database in ASP.NET. Google charts allows you to create a chart that lets you render each series as a different marker type from the following list:

关于SWT中的Combo类

Combo类的谱系图: 一个Combo类的实例: List的谱系图: List的用法与Combo基本是一样的.Combo的两个雷子只要将Text的定义部分改为List的定义语句,再稍微修改,就可以称为List类的例子.

Win32程序中使用 Combo box控件

  SendMessage函数向窗口发送消息 LRESULT SendMessage( HWND hWnd,     // handle to destination window UINT Msg,      // message WPARAM wParam, // first message parameter LPARAM lParam   // second message parameter ); 1 向Combo Box添加数据 HWND hWndComboBox = GetDlgI

能够生成常用的一维条码、postal code 条码、PDF417条码、DataMatrix, Aztec, QRCode, MaxiCode条形码控件Barcode .NET Control Combo

Barcode .NET Control Combo条形码控件是一款提供了6种不同类型条码的.NET控件,可以用于生成当前常用的一维条码.postal code 条码.PDF417条码.DataMatrix, Aztec, QRCode, MaxiCode,并且可以保存条码为不同的图像文件格式,可以使用PrintDocument 控件进行条码打印. 具体功能: 1维条码:Code 39, Code 128, GS1-128, ITF-14, SCC-14, SSCC-18, GS1 DataBa

炉石传说JJC英雄简评 &amp;&amp; JJC combo收集:Ver 1.0

? 1 2 3 4 5 6 7 /*-----------------------------------------------------------------------------  *  author:Rainboy and his GL 南柯CHY  *  wirte date:2014-04-29  * # LastUpdated: 2014-04-29 15:42  * ? Copyright 2014 Rainboy and his GL 南柯CHY.  All Rights

【转】VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)

原文网址:http://www.jizhuomi.com/software/189.html 上一节鸡啄米讲了列表框控件ListBox的使用,本节主要讲解组合框控件Combo Box.组合框同样相当常见,例如,在Windows系统的控制面板上设置语言或位置时,有很多选项,用来进行选择的控件就是组合框控件.它为我们的日常操作提供了很多方便. 组合框控件简介 组合框其实就是把一个编辑框和一个列表框组合到了一起,分为三种:简易(Simple)组合框.下拉式(Dropdown)组合框和下拉列表式(Dro

How to make a combo box with fulltext search autocomplete support?

I would like a user to be able to type in the second or third word from a TComboBoxitem and for that item to appear in the AutoSuggest dropdown options For example, a combo box contains the items: Mr John Brown Mrs Amanda Brown Mr Brian Jones Mrs Sam

Missing styles. Is the correct theme chosen for this layout? Use the Theme combo box above the layou

android无法静态显示ui效果. Missing styles. Is the correct theme chosen for this layout? Use the Theme combo box above the layout to choose a different layout, or fix the theme style references. Failed to find style 'textViewStyle' in current theme 採用的解决方法例如以

Combo Box的简单使用(Win32)

1 SendMessage函数向窗口发送消息 LRESULT SendMessage( HWND hWnd,     // handle to destination window UINT Msg,      // message WPARAM wParam, // first message parameter LPARAM lParam   // second message parameter ); 2 向Combo Box添加数据 HWND hWndComboBox = GetDlgI