99乘法表Java while_如何用一个循环语句输出九九乘法表?

#includeusing namespace std;

int n;

int main()

{

cin>>n;

for(int i=11;i<=11*n;i++)

{

cout<

i+=(i%10)/(i/10)*(10-(i%10));

}

return 0;

}

最新更新!!!!!学长这个答案几乎算是完全符合了,可以终结!

这是目前见过最符合标准的!手动 @大神

@孙骏博 了不起的学长完成了这个艰难而严苛的挑战

==============以下近似正确版本=====================

#define _SCL_SECURE_NO_WARNINGS#include#includeusing namespace std;

int num[101][101];

int main()

{

int n;

cin >> n;

for (int i = 1; i <= n; ++i)

{

copy(&num[i - 1][0], &num[i - 1][101], &num[i][0]);

num[i][i] = i;

for_each(&num[i][1], &num[i][i + 1], [i](const int a){cout << i << '*' << a << '=' << i *a << ' '; });

cout << endl;

}

return 0;

}

(for_each()相当于一个循环,但由于原题并没有限制用STL这种程度的算不算循环,我认为这是目前为止我见过的最符合原题的答案。)

==============原答(tu)案(cao)===================

先说结论:按原贴要求过于严苛,毫无意义。(利益相关:C++党)

这是我思考了半个多小时加一个晚饭时间得出的结论。

引用一下原贴要求。注意:

此题是考思想的,用“*”之外的运算符,如 "& | ^ >> << / % "的,虽然确实可以有解,但是代码逻辑与我倡导的:"一个好的算法首先是简单易懂的,其次是清晰明了的,再个一定是充满美感的"是相违背的。为什么下面条件这么多,实在是亲们的创意无限,我防不胜防哦。

活动规则:

1. n可以是任意正整数,只要N的平方不要溢出都可以

2. 一行一行print结果的无效

3. 不允许出现if,switch,?:语句及判断语句的变体,也就是只允许循环变量做条件比较以确定循环次数

4. 不允许其它变量进行条件判断

5. 不允许出现异常

6. 循环语句中只能有一个变量

7. 代码行数超过100行的无效

8. 特别提示:提交问题并在51CTO关注本人,回答才有效

9. 答案是否有效解释权归本人所有

问题如下

不管是什么编程语言,最好是Java。只要是在程序中只用了一条循环语句正确的输出了99表,那么就算挑战成功。

下面是我的测试用例:

测试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

我们先考虑正常写代码的情况,即在无初始化不打表的情况下真正地把九九乘法表计算出来。

(作为一个OIER总会有用各种神奇的技巧打表糊弄黑箱的恶习)

综合一下他给的条件。

首先,循环语句只允许有一个。这是没啥问题的。管你是while还是for。

其次,不允许有判断语句。而且详细说了,?,if,switch都是不行的,本来想抖机灵用?看来是不行了。而且明确说了这个判断的范围是全程序,仅有循环结束一个判断。

这就阉割了三种基本语句中的一大种。这意味着什么?至此为止,你不能想各种神奇的方法,无论是递推递归,把队列或者栈排空,甚至goto都不行。

至此,连输出换行都是个问题了

最后,又限制了循环语句内只能有一个变量(特意百度,循环语句指的是控制循环的那个而非其下属的顺序语句),也就是说,可以判断终止的循环只有一个,这是很严谨的。同时也意味着不可能同时循环两个东西,因为至少有一个变量是不可控的。for(int i,j;;)就不行了。

那么如果可以初始化甚至打表呢?

那方法显然就多了,而且甚至根本没有设限。

原题只说不允许一行行printf,那我把它初始化存到数组(或者其他容器)里再printf呢?

这里却没有限制。

综上所述,这一点都不好玩。看了已有的答案,多是变相使用了控制。比如b=x==y;用这种方法define出来一个等效于if语句的也没什么毛病。另外的基本就是不符合原帖子了。

除非。是有现成函数的比如matlab和原帖。

应该说,循环数和控制语句这两个限制条件取消任何一个,都会变成百花齐放的特别好的问题。但这种情况下,发挥不了创意,甚至毫无意义。

附录:我脑补的后被排掉的各种思路。

循环乘法结果,分解因式。

递推式

用队列维护每次push进去,下一次取出队里的乘起来

跑小函数

rand一下定位位置扔到二维数组里

再加上之前答主们充满创意的答案,全都被各种要求无情地WA了。

你要一重循环,如果当是锻炼对复杂度的要求就罢了,连判断都不让算哪回事?

但是。我校信竞某学长还是提出了STL中的一线生机……for_each();

坐等学长写代码。代码在上面

你可能感兴趣的:(99乘法表Java,while)