UVa 138 - Street Numbers (门牌号)

本文探讨了一种独特的住宅选择条件,即住宅的门牌号之和(不包括自身)沿街方向行走时保持不变。通过数学方法,生成了满足此条件的前10对门牌号组合,每对由房屋编号和最后一个门牌号组成。


Time limit: 3.000 seconds
限时3.000秒

 

Problem
问题

A computer programmer lives in a street with houses numbered consecutively (from 1) down one side of the street. Every evening she walks her dog by leaving her house and randomly turning left or right and walking to the end of the street and back. One night she adds up the street numbers of the houses she passes (excluding her own). The next time she walks the other way she repeats this and finds, to her astonishment, that the two sums are the same. Although this is determined in part by her house number and in part by the number of houses in the street, she nevertheless feels that this is a desirable property for her house to have and decides that all her subsequent houses should exhibit it.
有一个计算机程序员,她家所在的某条路上的住宅都在路的同一边,编号由1开始依次递增。她每天晚上都要出门溜狗,或向左走或向右走,直到街尾后返回。有一天溜狗时她计算了沿街的门牌号之和(不包括她家的),第二天她走了相反的方向也计算了门牌号之和,结果令她震惊——两次门牌号之和竟然相同。尽管这个结果是由沿街的房子数量以及她家的门牌号决定的,但她仍然觉得这非常奇妙,并决定将此作为以后选择住房的必要条件。

 

Write a program to find pairs of numbers that satisfy this condition. To start your list the first two pairs are: (house number, last number):
写一个程序来计算满足上述条件的参数。参数包含两个整数,第一个是她的房子的门牌号,第二个是最后一个房子门牌号。

         6         8
        35        49

 

Input and Output
输入与输出

There is no input for this program. Output will consist of 10 lines each containing a pair of numbers, each printed right justified in a field of width 10 (as shown above).
这个程序没有输入。输出前10个能满足上面条件的整数对,每对整数独占一行,每个整数都居右对齐,宽度为10个字符(示例如上)。

 

Analysis
分析

这道题可以用暴力搜索的方法来做,算法效率是O(n3),但事实上是可以用数论的方法来生成所有解的,下面将用最简单的数学语言进行介绍。设全部的房子数为n,她住的为k,那么按照题目的要求n和k必须满足:

  • 1 + 2 + ... + (k – 1) = (k + 1) + (k + 2) + ... + (n)    (1)

用等差数列求和公式Sn=n(a1+an)/2对(1)进行化简,得:

  • (k – 1)[1 + (k – 1)] / 2 = (n – k)[(k + 1) + n] / 2, 两边同乘以2
  • (k – 1)[1 + (k – 1)] = (n – k)[(k + 1) + n]    (2)

将(2)式再次化简,得:

  • 2k2 = n2 + n    (3)

题目就转化为求出满足(3)式的最小的前10对正整数:n和k。先将上式两边配方,移项得:

  • (2n + 1)2 – 2(2k)= 1    (4)

令:

  • x = 2n + 1,y = 2k  (5)

将(5)代入(4)式,可得:

  • x2 – 2y2 = 1    (6)

不定方程(6)是一个典型的佩尔(Pell)方程,要推导求解该方程需要数论的一些基本概念,篇幅所限不再赘述,相关内容请参见维基百科:佩尔方程。为了方便程序实现,应使用递归公式进行求解。易知方程(6)的最小一组正整数解为(x0=3, y0=2),将题目所给的最小一组解(n=8,k=6)代入(5)式可得方程的解为(17, 12)。经验算可知(也可由下面的公式对(x0, y0)进行迭代求出),(17, 12)恰好为(6)式的第二组正整数解。至此初始值(前两组(x, y)解)计算完毕,后面的(x, y)可用迭代公式求出:

  • xi+1 = xix0 + nyiy0
  • yi+1 = xiy0 + yix0    (7)

用(7)迭代出前10组(x, y),然后用(5)式进行反算:

  • n = (x – 1) / 2, k = y / 2    (8)

即可求得前10组n和k。算法实现中,注意保留前一次的x和y值。若在计算下一个y值前已完成x的迭代,那么y值的迭代将出现错误。此外由于本题没有输入,您也可以预先将答案生成,在程序中直接按格式输出结果,这样速度最快(不过有点无耻哈~)。

 

Solution
解答

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iomanip>
#include <iostream>
using  namespace  std;
int  main( void ) {
     //循环10次,计算出每一组数据,x0和y0为最小解,x和y为迭代解
     for  ( int  i = 0, x0 = 3, y0 = 2, x = x0, y = y0, t; i < 10; ++i, x = t) {
         t = x * x0 + 2 * y * y0; //用t临时保存算得的x
         y = x * y0 + y * x0; //计算出y
         //用x和y解出n和k并输出
         cout << setw(10) << y / 2 << setw(10) << (t - 1) / 2 << endl;
     }
     return  0;
}


转载自:http://www.cnblogs.com/devymex/archive/2010/09/07/1818983.html

内容概要:本文设计了一种基于PLC的全自动洗衣机控制系统内容概要:本文设计了一种,采用三菱FX基于PLC的全自动洗衣机控制系统,采用3U-32MT型PLC作为三菱FX3U核心控制器,替代传统继-32MT电器控制方式,提升了型PLC作为系统的稳定性与自动化核心控制器,替代水平。系统具备传统继电器控制方式高/低水,实现洗衣机工作位选择、柔和过程的自动化控制/标准洗衣模式切换。系统具备高、暂停加衣、低水位选择、手动脱水及和柔和、标准两种蜂鸣提示等功能洗衣模式,支持,通过GX Works2软件编写梯形图程序,实现进洗衣过程中暂停添加水、洗涤、排水衣物,并增加了手动脱水功能和、脱水等工序蜂鸣器提示的自动循环控制功能,提升了使用的,并引入MCGS组便捷性与灵活性态软件实现人机交互界面监控。控制系统通过GX。硬件设计包括 Works2软件进行主电路、PLC接梯形图编程线与关键元,完成了启动、进水器件选型,软件、正反转洗涤部分完成I/O分配、排水、脱、逻辑流程规划水等工序的逻辑及各功能模块梯设计,并实现了大形图编程。循环与小循环的嵌; 适合人群:自动化套控制流程。此外、电气工程及相关,还利用MCGS组态软件构建专业本科学生,具备PL了人机交互C基础知识和梯界面,实现对洗衣机形图编程能力的运行状态的监控与操作。整体设计涵盖了初级工程技术人员。硬件选型、; 使用场景及目标:I/O分配、电路接线、程序逻辑设计及组①掌握PLC在态监控等多个方面家电自动化控制中的应用方法;②学习,体现了PLC在工业自动化控制中的高效全自动洗衣机控制系统的性与可靠性。;软硬件设计流程 适合人群:电气;③实践工程、自动化及相关MCGS组态软件与PLC的专业的本科生、初级通信与联调工程技术人员以及从事;④完成PLC控制系统开发毕业设计或工业的学习者;具备控制类项目开发参考一定PLC基础知识。; 阅读和梯形图建议:建议结合三菱编程能力的人员GX Works2仿真更为适宜。; 使用场景及目标:①应用于环境与MCGS组态平台进行程序高校毕业设计或调试与运行验证课程项目,帮助学生掌握PLC控制系统的设计,重点关注I/O分配逻辑、梯形图与实现方法;②为工业自动化领域互锁机制及循环控制结构的设计中类似家电控制系统的开发提供参考方案;③思路,深入理解PL通过实际案例理解C在实际工程项目PLC在电机中的应用全过程。控制、时间循环、互锁保护、手动干预等方面的应用逻辑。; 阅读建议:建议结合三菱GX Works2编程软件和MCGS组态软件同步实践,重点理解梯形图程序中各环节的时序逻辑与互锁机制,关注I/O分配与硬件接线的对应关系,并尝试在仿真环境中调试程序以加深对全自动洗衣机控制流程的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值