《入门经典》——6.15

可以说数学是算法的基石,那么这里便通过介绍几道数学题目来窥探一下数学思维如何和编程有机的结合起来。

Cantor的数表:有下列数,第一项是1/1,第二项是1/2第三项是2/1,第四项是3/1,第五项2/2,….。输入n,输出第n项。

1/1  1/2  1/3  1/4  1/5

2/1  2/2  2/3  2/4

3/1  3/2  3/3

4/1  4/2

5/1

样例输入:

3

14

7

12345

样例输出:

2/1

2/4

1/4

59/99

分析:这是一道典型的寻找数表规律然后编码实现的题目,他考察一定的数学归纳能力。

这里通过题设的提示,我们不难看到这个数表沿着斜线走“s”型路线,而对于每条斜线,我们能够看到分析分母的和是一致的。

对于输入的n,我们首先计算它前面有多少条完整斜线,记为k:

那么判断第n项所在斜线的序号k+1的奇偶性,这决定了分子分母的递增方向。

如果k+1是偶数,那么分母从左下方往右上方递增,分子分母的和为k+2。

简易的参考代码如下。

#include<cstdio>

#include<cmath>

using namespace std;

int main()

{

    int n , k;

    while(scanf("%d",&n) != EOF)

    {

        k = (int)floor((sqrt(8.0*n+1)-1)/2-1e-9); //floor向下取整函数

        int temp = ((1 + k)*k)/2;

        printf("k = %d temp = %d\n",k , temp);

        if((k + 1) % 2 == 0)

             printf("%d/%d\n",n-temp,k + 2 - n + temp);

        else

             printf("%d/%d\n",k + 2 - n + temp,n - temp);

    }

}          
时间: 2024-10-25 00:52:09

《入门经典》——6.15的相关文章

C/C++算法竞赛入门经典Page11 例题1-5 三整数排序

题目:输入3个整数,从小到大排序后输出 样例输入: 20 7 33 样例输出: 7 20 33 首先,先声明三个整数a,b,c和一个临时变量t: int a,b,c,t;//1,b,c为三个整数,t为临时变量 输入三个整数: scanf("%d%d%d",&a,&b,&c); 进行3次if判断: 1.如果b>a,则a,b对调 2.如果c>a,则a,c对调 3.如果c>b,则b,c对调 代码: if(b>=a){ t=b; b=a; a=t

1056. 组合数的和(15)

给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字.要求所有可能组合出来的2位数字的和.例如给定2.5.8,则可以组合出:25.28.52.58.82.85,它们的和为330. 输入格式: 输入在一行中先给出N(1<N<10),随后是N个不同的非0个位数字.数字间以空格分隔. 输出格式: 输出所有可能组合出来的2位数字的和. 输入样例: 3 2 8 5 输出样例: 330 code: 1 #include <stdio.h> 2 3 int main() 4 {

“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛 B

<神无月>作为盛大游戏2017年的全新原创大作,其开发团队在自研实力强大的传世工作室基础之上,还有美树本晴彦等日本一线知名画师及日本游戏音乐大师崎元仁加盟参与制作.目前正在不限号内测中,有很多玩家进入到神无月的世界中. 在神无月中,有着玩家之间切磋的排位赛,其段位主要分为五大段位,从低到高依次为:新兵.菁英.战将.统帅.王者.每个玩家只有从新兵段位慢慢努力,一点点晋级才能到达王者段位.成为一个王者是每一个玩家的追求和心愿. 假设神无月的段位系统如下: 从低到高的段位依次简记为:D.C.B.A.

java第15章示例代码

import java.util.Scanner; /** * * @author asus第15章示例代码1 全桂群2017.4.9 * */public class Registter { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); String uname, pw

Java并发程序设计(15)并发锁之读写锁(续二)写锁降级

1.1.1. 读写锁应用之三写锁降级 ReentrantReadWriteLock还具有写锁降级的特点,而这跟可重入性有一些关系. (1)持有写锁时可以降级为读锁. (2)持有读锁时不能升级为写锁. ReentrantReadWriteLock和ReentrantLock相似的是都有一个特点,就是可重入.可重入指已经获取到锁的线程可以再次获取锁,保证lock和unlock的次数相同即可. package com.test.concurrence; import java.util.Random;

log4j的1.2.15版本,在pom.xml中的顶层project报错错误: Failure to transfer javax.jms:jms:jar:1.1 from https://maven-repository.dev.java.net/nonav/repository......

在动态网站工程中,添加了Pom依赖,当添加log4j的1.2.15版本依赖时,在pom.xml中的顶层project报错错误: Failure to transfer javax.jms:jms:jar:1.1 from https://maven-repository.dev.java.net/nonav/repository......,如下图 这是因为 https://maven-repository.dev.java.net/nonav/repository 这个域名已经无法解析了. 而

java 19 -15 File类批量更改文件名的方法

1 /* 2 需求: * 把H:\三国演义下面的视频名称修改为 3 00?_介绍.avi 4 5 思路: 6 A:封装目录 7 B:获取该目录下所有的文件的File数组 8 C:遍历该File数组,得到每一个File对象 9 D:拼接一个新的名称,然后重命名即可. 10 */ 11 package zl_file; 12 13 import java.io.File; 14 public class FileTest3 { 15 16 public static void main(String

Linux 第15天: (08月29日) Linux高级文件系统管理

本章内容设定文件系统配额设定和管理软RAID设备配置逻辑卷设定LVM快照btrfs文件系统 配置配额系统综述在内核中执行以文件系统为单位启用对不同组或者用户的策略不同根据块或者节点进行限制执行软限制(soft limit)硬限制(hard limit)初始化分区挂载选项:usrquota.grpquota初始化数据库:quotacheck 为用户设定配额执行开启或者取消配额:quotaon.quotaoff直接编辑配额:edquota username在shell中直接编辑:setquota u

TControl的消息覆盖函数大全(15个WM_函数和17个CM_函数,它的WndProc就处理鼠标与键盘消息)

注意,这些函数只有Private一种形式(也就是不允许覆盖,但仍在动态表格中): TControl = class(TComponent) private // 15个私有消息处理,大多是鼠标消息.注意,消息函数大多只是一个中介,且TWinControl并不重写. procedure WMNCLButtonDown(var Message: TWMNCLButtonDown); message WM_NCLBUTTONDOWN; procedure WMLButtonDown(var Messa

分享最新15个加速 Web 开发的框架和工具(梦想天空)

我们为开发人员挑选了15个最新的  Web 开发框架,你肯定尝试一下这些新鲜的框架,有的可能略微复杂,有的提供了很多的配置选项,也有一些窗口小部件和界面交互的选择.他们将帮助你创建更优秀的网站,提供给用户更好的体验. 您可能感兴趣的相关文章 Web 前端开发人员和设计师必读精华文章推荐 精心挑选的优秀jQuery Ajax分页插件和教程 12个让人惊叹的的创意的 404 错误页面设计 让网站动起来!12款优秀的 jQuery 动画插件 8个前沿 HTML5 & CSS3 效果[附源码下载] 1.