Hello写了一个打印出来的程序;
0
01
012
0123
01234
012345
01234
0123
012
01
0
我很确定我的方法很长而且很愚蠢,看看它是什么样的
#include <stdio.h>
int main(void)
{
int first = -1, second = -1, third = -1, fourth = -1, fifth = -1, sixth = -1, seventh = -1, eight = -1, nine = -1, ten = -1, elleven = -1;
while(first < 0){
first += 1;
printf("%d\n", first);
while(second < 1){
second += 1;
printf("%d", second);
}
printf("\n");
while(third < 2 ){
third += 1;
printf("%d", third);
}
printf("\n");
while(fourth < 3){
fourth += 1;
printf("%d", fourth);
}
printf("\n");
while(fifth < 4){
fifth += 1;
printf("%d", fifth);
}
printf("\n");
while(sixth < 5){
sixth += 1;
printf("%d", sixth);
}
printf("\n");
while(seventh < 4){
seventh += 1;
printf("%d", seventh);
}
printf("\n");
while(eight < 3){
eight += 1;
printf("%d", eight);
}
printf("\n");
while(nine < 2) {
nine += 1;
printf("%d", nine);
}
printf("\n");
while(ten < 1){
ten += 1;
printf("%d", ten);
}
printf("\n");
while(elleven < 0){
elleven += 1;
printf("%d", elleven);
}
}
return 0;
}
如果有人愿意告诉我如何更容易地做到这一点? :)
答案 0 :(得分:2)
这些产生三角形输出的问题在数学上接近它们时总是最简单的。考虑绝对值函数(例如:|x|
或abs(x)
)。
#include <stdio.h>
#include <stdlib.h>
#define LARGEST_NUMBER (5)
#define MAX_VAL (LARGEST_NUMBER+1)
int main(void) {
int i,j;
for(i=0; i<2*MAX_VAL; i++) {
for(j=0; j<MAX_VAL-abs(MAX_VAL-i); j++) {
printf("%d",j);
}
printf("\n");
}
return 0;
}
输出:
0
01
012
0123
01234
012345
01234
0123
012
01
0
我觉得这是解决此类问题的最简洁的数学方法。我过去曾向学生提供过这个问题,并坚持要求解决方案使用abs()
函数,以使函数尽可能大地factored
(即:最少数量的循环,变量,行代码和函数调用。)
这是关于数学函数本身的维基文章:
http://en.wikipedia.org/wiki/Absolute_value#Absolute_value_function
享受!
答案 1 :(得分:1)
好吧,我注意到你有一个字符串,其长度从1到6不等,然后返回,包含从0到其长度的符号。
所以我们可以用两个循环来做到这一点,一个是升序,一个是降序,两个都是嵌套的,以获得所有符号。
int i, j;
for (i = 0; i < 6; i++)
{
for (j = 0; j <= i; j++)
printf("%d", j);
printf("\n");
}
for (i = 5; i > 0; i--)
{
for (j = 0; j < i; j++)
printf("%d", j);
printf("\n");
}
第二个for
可以替换为while(--i)
,因为i
从上一个周期结束开始。
输出:
0
01
012
0123
01234
012345
01234
0123
012
01
0
答案 2 :(得分:0)
而不是N个循环使用单个循环,它会重置其计数器并在最后一个计数器超过其限制时限制。当其中一个旧循环结束时,插入换行符,将计数器设置回-1,并递增限制(要测试计数器的变量)。
答案 3 :(得分:0)
这是我的尝试:
int main()
{
int i, j;
for (i = 0; i <= 5; ++i) {
for (j = 0; j <= i; ++j)
printf("%d", j);
printf("\n");
}
for (i = 4; i >= 0; --i) {
for (j = 0; j <= i; ++j)
printf("%d", j);
printf("\n");
}
return 0;
}
答案 4 :(得分:0)
这是使用 while循环的版本。
#include <stdio.h>
#define MAX 5
int main()
{
int j=0, m=0, dec=0;
while( m>=0 && m<=MAX)
{
for (j = 0; j <= m; j++)
printf("%d", j);
printf("\n");
if (m==MAX)
dec = 1; // once hit MAX, chg inc to dec
(dec)? m--: m++;
}
}