今天看到别人一个博客提出来一个非常有趣的题目,写一个9*9的乘法表,要求只使用且仅使用一个for来实现9*9乘法表的打印。(不使用if,switch,?:)
 
可以用任何语言实现,下面是博主给的java测试样例:
测试1:
public static void main(String[] args) {
new Test99().print(9);
}
运行结果:
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
测试2:
public static void main(String[] args) {
new Test99().print(5);
}
运行结果
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
 
既然只能用一个for,并且不能使用if,switch,?: 判断语句又需要打印出矩阵来,能想到就只有下面的逻辑了。
 
下面我用了两种方法来解决这个问题。
 
第一个方法是递归,第二个方法是逻辑运算,代码前面两个函数是普通的99表,和只用一个for不限制if的99表。
#include <stdio.h>

int _99;

void output(int n) {
for(int i=; i<=n; i++) {
for(int j=; j<=i; j++) {
printf("%4d",i*j);
}
puts("");
}
return ;
} void output_one_for(int n) {
int i, j;
for(i=, j=; j<=n; i++) {
printf("%4d",i*j);
if(j==i) {
puts("");
i=;
j++;
}
}
return ;
} bool output_one_for_zero_if(int n) {
int i;
for(i=; i<=n; i++) {
printf("%4d",i*n);
}
puts("");
return n==_99 || output_one_for_zero_if(n+);
} void output_without_rec(int n){
int i, j;
for(i= ,j=;j<=n;i++){
printf("%4d",i*j);
i%j||puts("");
i%=j;
i||j++;
}
} void pt(int n) {
_99 = n ;
puts("normal 9*9 list:");
output(_99);
puts("\nonly for 9*9 list:");
output_one_for(_99);
puts("\nonly one for with out if,switch,?: 9*9 list:");
output_one_for_zero_if();
puts("\nonly one for and without recursive to make 9*9 list:");
output_without_rec(_99);
return ;
} int main() {
pt();
return ;
}

这个题目最难的地方莫过于换行, 昨天和【淦】日天交流这个题目的时候他也给出来另外一种换行的方法。

void ZRT(int n){
int i, j;
for(i=,j=;j<=n;i++){
printf("%4d",i*j);
printf("%c","\0\n"[i==j]); //意思就是将"\0\n"看作一个字符串的函数名,利用[i==j]来取输出'\0'还是'\n'。有趣的操作。
i%=j;
i||j++;
}
return ;
}

一个for实现9*9乘法表的更多相关文章

  1. 写一个方法,用一个for循环打印九九乘法表

    public class MultiplicationTable { /**  * @description 写一个方法,用一个for循环打印九九乘法表   * @author  wangkun  * ...

  2. JAVA - 一个for循环实现99乘法表

    public class Test03 {public static void main(String[] args) { int lie = 1; for (int hang = 1; hang&l ...

  3. 9x9乘法表输出[Java]

    笔试,9x9乘法表输出的问题,看似简单,回来把当时写的结果输入一遍后发现,并没有想象中的“完美”.把改写的pos在此,警示...不要忘记任何细节. public class NXN { public ...

  4. 使用JSP表达式和JSP脚本打印九九乘法表

    首先使用JSP声明声明一个函数用于得到九九乘法表的内容 <%! String printMultiTable() { String s = ""; for (int i = ...

  5. PHP一个for循环输出9*9乘法表

    一个for循环输出9*9乘法表 代码如下 <?php for ($i = 1, $j = 1; $i <= 9; $i++) { if ($i > $j) { $j++; $i = ...

  6. 使用Vue写一个九九乘法表

    Vue.js是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. 下面是在Vue 测试实例 - 菜鸟教程(runoob.com)使用Vue写的一个九九乘法表, ...

  7. 利用js的for循环实现一个简单的“九九乘法表”

    For循环九九乘法表 for循环是javascript中一种常用的循环语句,可以很好的解决在程序中需要重复执行某些语句,利用for循环实现简单的“九九乘法表”的效果: 让循环从小到大,依次排序,并计算 ...

  8. 编写一个jsp页面,输出九九乘法表。

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  9. 在网页中打印一个99乘法表--JavaScript描述

    99乘法表使用for循环,在很多公司的面试中常会要求面试者手写这个算法,算是比较经典的for循环的应用 <!DOCTYPE html><html lang="en" ...

随机推荐

  1. makefile 嵌套

    目录结构: dynamic 和 static 两个目录实现加法功能, 分别生成动态库和静态库,   main.c 主文件链接加法功能,  终端命令执行:   make dynamic=1  则编译动态 ...

  2. idea编译错误提示编译版本不对,需要注意的配置

  3. VS Code保存使用项目Eslint规则格式化代码

    One.文件-首选项-设置-选择项目                  Two.打开右上角JSON设置            Three. 插入以下代码 { "eslint.options& ...

  4. selenium中webdriver识别class属性多个值中有空格的解决方案

    初学自动化测试,貌似大家十有八九都是用百度网站进行练手的,特此感谢百度. http://www.baidu.com 页面中主要就是搜索框和提交按钮: 输入框各元素属性:<input id=&qu ...

  5. story 泄露服务器libc版本

    记录下学到的姿势,利用信息泄露得到服务器libc 至少两个函数偏移,利用libc-databse得到服务器libc版本 传送门 泄露脚本如下 from pwn import * context.log ...

  6. C# 登陆验证码工具类VerifyCode

    using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; ...

  7. 洛谷P4770 [NOI2018]你的名字 [后缀自动机,线段树合并]

    传送门 思路 按照套路,直接上后缀自动机. 部分分:\(l=1,r=|S|\) 首先把\(S\)和\(T\)的后缀自动机都建出来. 考虑枚举\(T\)中的右端点\(r\),查询以\(r\)结尾的串最长 ...

  8. 使用SecureCRT做端口转发

    我的笔记本只能访问跳板机,跳板机是Linux系统,访问内网机器需要在跳板机内通过ssh命令访问,特别不方便,而且我们还需要访问Windows或web网站. 这是我们就可以做一个端口转发,通过自己的笔记 ...

  9. RCNN论文学习

    [Rich feature hierarchies for accurate object detection and semantic segmentation] Abstract     论文的方 ...

  10. Linux系统(虚拟机)安装禅道

    1.查看linux系统版本 uname -a 2.禅道下载:http://www.zentao.net/download.html,找到要下载的版本,点击进入各平台下载: 3.将下载好的安装包上传到l ...