好的,逐个目标:执行此操作的命令行应用程序:
Countdown.exe 7
打印7 6 5 4 3 2 1
没有任何形式的减法(包括使用减号)或字符串反转所允许的.
waaaaay显然太容易了:-)概述答案(至少原则)
小智 46
x = param;
while (x > 0) {
print x;
x = (x + param) mod (param + 1);
}
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 38
添加和递归怎么样?
public void Print(int i, int max) {
if ( i < max ) {
Print(i+1, max);
}
Console.Write(i);
Console.Write(" ");
}
public void Main(string[] args) {
int max = Int32.Parse(args[0]);
Print(1, max);
}
Run Code Online (Sandbox Code Playgroud)
ken*_*418 17
这是你错过的方法,试验和错误:
import java.util.Random;
public class CountDown
{
public static void main(String[] args)
{
Random rand = new Random();
int currentNum = Integer.parseInt(args[0]);
while (currentNum != 0)
{
System.out.print(currentNum + " ");
int nextNum = 0;
while (nextNum + 1 != currentNum) {
nextNum = rand.nextInt(currentNum);
}
currentNum = nextNum;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Sco*_*ham 13
使用2的赞美,毕竟这是计算机处理负数的方式.
int Negate(int i)
{
i = ~i; // invert bits
return i + 1; // and add 1
}
void Print(int max)
{
for( int i = max; i != 0; i += Negate(1) )
{
printf("%d ", i);
}
}
Run Code Online (Sandbox Code Playgroud)
见http://en.wikipedia.org/wiki/2's_complement
Pau*_*lin 11
将数字前置到字符串缓冲区中.
String out = "";
for (int i = 0; i < parm; i++)
{
out = " " + (i+1) + out;
}
System.out.println(out);
Run Code Online (Sandbox Code Playgroud)
Sco*_*ham 11
c/c ++,有点算术溢出:
void Print(int max)
{
for( int i = max; i > 0; i += 0xFFFFFFFF )
{
printf("%d ", i);
}
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*her 10
我注意到没有人发布最愚蠢的答案,所以我会继续分享它:
int main (int argc, char **argv) {
if ( ( argc < 1 ) || ( atoi(argv[1]) != 7 ) ) {
printf("Not supported.\n");
} else {
printf("7 6 5 4 3 2 1\n");
}
}
Run Code Online (Sandbox Code Playgroud)
不要恨我:看?我承认这是愚蠢的.:)
使用舍入误差:
void Decrement(int& i)
{
double d = i * i;
d = d / (((double)i)+0.000001); // d ends up being just smaller than i
i = (int)d; // conversion back to an int rounds down.
}
void Print(int max)
{
for( int i = max; i > 0; Decrement(i) )
{
printf("%d ", i);
}
}
Run Code Online (Sandbox Code Playgroud)
这并不难.使用模数运算符.
for (int n = 7; n <= 49; n += 7) {
print n mod 8;
}
Run Code Online (Sandbox Code Playgroud)
按位算术
恒定空间,没有加法,减法,乘法,除法,模数或算术否定:
#include <iostream>
#include <stdlib.h>
int main( int argc, char **argv ) {
for ( unsigned int value = atoi( argv[ 1 ] ); value; ) {
std::cout << value << " ";
for ( unsigned int place = 1; place; place <<= 1 )
if ( value & place ) {
value &= ~place;
break;
} else
value |= place;
}
std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)