#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();
坐等学长写代码。代码在上面