今天看到别人一个博客提出来一个非常有趣的题目,写一个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. selenium定位方式-获取标签元素:find_element_by_xxx

    定位方式取舍# 唯一定位方式.多属性定位.层级+角标定位(离目标元素越近,相对定位越好) # 推荐用css selector(很少用递进层次的定位)# 什么时候用xpath呢? 当你定位元素时,必须要 ...

  2. MFC常用宏

    MFC调试宏 TRACE()   其形式与函数printf()的参数一样,功能是在调试运行时把表达式的值输出到Output调试窗口. Debug版有效 ASSERT()——断言宏,  表达式为真,则程 ...

  3. Python爬虫之12306-分析请求总概述

    python爬虫也学了一段时间了.也爬过不少网站,最后我想用12306抢票器这个项目做一个对之前的学习的效果成见也是一个目标(开始学爬虫的时候,看到说,会爬12306,就会爬80%的网站),本人纯自学 ...

  4. 分布式系列十: Redis安装和命令

    redis是一个开源的, 内存数据结构存储, 一般用来作为数据库,缓存和消息代理. Redis的优势 多种数据结构 字符类型String 散列类型Hash 列表类型List 集合类型Set 有序集合类 ...

  5. ICMP shell

    场景 反向shell的场景下使用 原理 ICMP作为获取反向shell的通道 实践 运行 run.sh报错,可能是因为用的Parrot.改一下就可以了 ifconfig | grep 'inet '| ...

  6. PMI-ACP练习题知识积累-打印版

    敏捷铁三角的参数:价值,质量,约束.传统的铁三角包括的参数是范围,进度和成本 敏捷计划的三个主要层级为:发布计划,迭代计划,每日计划 敏捷开发模型的特征包括 开发由多个迭代组成. 敏捷拥抱不确定性,而 ...

  7. codeforces 343D 树剖后odt维护

    子树修改+路径修改+单点查询 树链剖分+区间维护即可 由于只有单点查询,我直接用了odt,复杂度还行 #include<bits/stdc++.h> #define endl '\n' # ...

  8. 分布式事务2PC_PENDING异常处理

    set heading off;set feedback off;set echo off;Set lines 999;Spool rollback.sqlselect 'ROLLBACK FORCE ...

  9. 初学ASP.NET 知识点

    1.C# 中的虚方法 和 C++中的作用一致,能让指向子类的父类指针优先到子类中寻找方法,而不是直接调用父类中的方法. 看一段例子回忆下: namespace ConsoleApplication1 ...

  10. md5加密 bas64加密

    /** * 获取bas64加密的算法 * @param str * @return */ public static String getBase64(String str) { byte[] b = ...