C++-用C或C++如何在不用循环语句或者条件语句的情况下输出1到1000?

发布于 2017-01-30 14:58:36 字数 23 浏览 1226 评论 7

不要写1000次printf语句

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

甜柠檬 2017-09-02 04:57:52

老外 搞过这个讨论 用c++ 模版
编译器预处理 居多 呵呵:)

贴几个别人写的代码:
例子1

template<int N> void f1()
{
f1<N-1>();
cout << N << 'n';
}

template<> void f1<1>()
{
cout << 1 << 'n';
}

// short circuiting (not a conditional statement)
void f2(int N)
{
N && (f2(N-1), cout << N << 'n');
}

// constructors!
struct A {
A() {
static int N = 1;
cout << N++ << 'n';
}
};

int main()
{
f1<1000>();
f2(1000);
delete[] new A[1000]; // (3)
A data[1000]; // (4) added by Martin York
}

例子2

#include <iostream>
template<int N>
struct NumberGeneration{
static void out(std::ostream& os)
{
NumberGeneration<N-1>::out(os);
os << N << std::endl;
}
};
template<>
struct NumberGeneration<1>{
static void out(std::ostream& os)
{
os << 1 << std::endl;
}
};
int main(){
NumberGeneration<1000>::out(std::cout);
}

例子3

 #include <stdio.h>
#define MAX 1000
int boom;
int foo(n) {
boom = 1 / (MAX-n+1);
printf("%dn", n);
foo(n+1);
}
int main() {
foo(1);
}

泛泛之交 2017-07-22 09:52:37

我再补充两个答案

 #include <stdio.h>
#include <stdlib.h>

void main(int j) {
printf("%dn", j);
(&main + (&exit - &main)*(j/1000))(j+1);
}

#include <stdio.h>
int i = 0;
p() { printf("%dn", ++i); }
a() { p();p();p();p();p(); }
b() { a();a();a();a();a(); }
c() { b();b();b();b();b(); }
main() { c();c();c();c();c();c();c();c(); return 0; }

清晨说ぺ晚安 2017-05-19 08:48:10

最简单的。。。goto

晚风撩人 2017-04-15 00:00:05

shell的 seq 可以做

偏爱自由 2017-04-10 21:45:41

 #include <iostream>
#include <iterator>
#include <vector>
#include <numeric>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
ostream_iterator<int> it(cout," ");
vector<int> xxx(1000,1);
partial_sum(xxx.begin(),xxx.end(),it);
getchar();
return 0;
}

清晨说ぺ晚安 2017-04-02 14:17:01

最朴素的想法就是直接打印出来,但是1000条打印代码的写法被出题者禁止,所以自然变通的方法是函数调用,上面有个哥们提到了递归,但是递归函数是一定要有结束条件判断的,不然就是无限循环了。所以可以考虑用二进制编码单位去构造基础函数,具体方法如下:

 p512(1);
p256(513);
p128(770);
p64(899);
p32(964);
p4(997);

void p512(int a){
p256(a);
p256(a+256);
}

...

void p2(int a){
p1(a);
p1(a+1);
}

void p1(int a){
printf("%d ", a);
}

说明:上面函数 pm(n)的定义是从n开始连续打印m个整数。只所以用这种方式而不是写成
p(m, n)的递归函数定义方式是因为停止条件是要进行判断的。

虐人心 2017-03-28 09:46:46

是在编译器输出还是在运行期输出?如果是编译器的话Thomas说的就是了,如果要求运行期输出,那么可以递归函数实现

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文