| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2362 人关注过本帖
标题:这个代码我感觉很好,有人可以详细的看看,给我一个完整的解答
只看楼主 加入收藏
徐达文AA
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-11-19
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:11 
这个代码我感觉很好,有人可以详细的看看,给我一个完整的解答
#include<stdio.h>
int main(){
    int n,i,j,k;
    char c='z';
    scanf("%d",&n);
    for(i=1;i<=n*2-1;i++)
    {
        for(j=1;j<=n*2-1;j++)
        {
            for(k=1;k<=n*2-1;k++)
            {
                if(k==i||k==n*2-i||k==j||k==n*2-j)
                {
                    printf("%c",c-k+1);
                    break;
                }
            }
        }
        printf("\n");
    }
    return 0;
}
我同学写的,大佬们看一看,真的感觉这个很好,希望有人可以给我一个详细的回复
搜索更多相关主题的帖子: 代码 int for || printf 
2017-11-21 23:46
丘山君
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:87
专家分:154
注 册:2017-11-15
收藏
得分:2 
首先,你可以说下你的代码是为了实现什么目的,才好判断他是否好,死比,我一个小白感觉那么多重循环,感觉舒服,break的地方都可以通过修改而不用它。
小白做答。
2017-11-22 12:27
徐达文AA
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-11-19
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-11-22 19:20
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:2 
********************    *******************************************************************************************
#include<stdio.h>
int main(){
    int n,i,j,k;
    char c='z';
    scanf("%d",&n);
    for(i=1;i<=n*2-1;i++)        //行循环
    {
        for(j=1;j<=n*2-1;j++)    //列循环
        {
            for(k=1;k<=n*2-1;k++)           //印字,印出一个字符中断循环,保证每个坐标只印一个字母
            {
                if(k==i||k==n*2-i||k==j||k==n*2-j) //k==n*2-i,为保证竖直对称,k==n*2-j为保证左右对称,分析阶段可以无视
                                 //正常情况下,j=k 发挥作用,所以行字母为Z,Y,X。。。倒叙
                                 //但是,k==i在前,所以k=i优先于j=k发挥作用,这样就限定了第二行的最小字母只能是Y,第三行只能是x

                      //举例:比如第五行,i=5。前五列,在k循环中,k不超过5时,k=j的条件已经满足printf("%c",c-k+1)打印的分别是ZYXWU
                      //可是到了第六列第七列,等不到k=6或k=7(k=j),k=i(k=5)的条件优先满足,就打印出了U,然后k循环就退出了。
                {
                    printf("%c",c-k+1);    //从z开始倒叙打字母
                    break;
                }
            }
        }
        printf("\n");
    }
    return 0;
}

[此贴子已经被作者于2017-11-22 22:17编辑过]

2017-11-22 21:59
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:2 
应该有大神用一个循环完成,反正这样两个循环也能达到题目要求:
程序代码:
#include<stdio.h>
void main()
{
    int i,j,n;
    char c;
    scanf("%d",&n);
    for(i=0;i<n*2-1;i++,printf("\n"))
    {
        for(j=0,c='z';j<n*2-1;j++)
        {
            printf("%c",c);
            if(j<i)c--;
            if(j>n*2-i-3)c++;
        }
    }
}

2017-11-22 22:11
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:0 
回复 5楼 xzlxzlxzl
k循环省掉了,反而这个代码更易读一些,除了for()条件。

[此贴子已经被作者于2017-11-22 22:28编辑过]

2017-11-22 22:27
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:2 
回复 5楼 xzlxzlxzl
嗯,原来分段函数也能这样表达或者说这个本来就是一个分段函数~理论上二维数组空间地址连续的话可以通过离散化一维处理~不过嘛,可读性以及数据运算当然会大大影响了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-11-22 23:45
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:2 
回复 5楼 xzlxzlxzl
程序代码:
#include<stdio.h>
void aa(int i, int j, int n, int k, int t,bool f) {
    if(j<n){
            printf("%c",'z'-(n-k));
            if(t>0){
                t--;k--;f=t==0;
            }
            else if(f&&j>n-i-2){
                k++;
            }
        aa(i, j+1, n, k, t,f);
    }
}
void a(int i, int n){
    if(i>0){
        a(i-1, n);
        int r=i-n/2>0?n-i:i-1;
        aa(r,0,n,n,r,false);
        printf("\n");
    }
}
int main(){
    a(4, 4);
}


[此贴子已经被作者于2017-11-23 00:50编辑过]


剑栈风樯各苦辛,别时冰雪到时春
2017-11-23 00:49
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 5楼 xzlxzlxzl
二层循环离散化处理结果如下~

程序代码:
#include<stdio.h>
int main( void )
{
    int i,n,t,p;
    char c[2]="z\n";
    
    if (scanf("%d",&n)!=1||n<1)
        return 1;

    for (i=t=2*n;i!=t*t;++i)
    {
        
        putchar(c[p=!((t-1)^(i%t))]);
        
        if ((i+1)%t<i/t)
            --*c;
        
        if (i%t>t-i/t-2&&!p)
            ++*c;
    }
    
    return 0;
}


[此贴子已经被作者于2017-11-23 02:14编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-11-23 02:13
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:0 
#include<stdio.h>
#include<math.h>
int main()
{
    int i,j,m,n;
  scanf("%d",&n);
  for(m=0;m<(n*2-1)*(n*2-1);m++)
    {
        i=m/(2*n-1)+1;
        j=m%(2*n-1)+1;
        if(j==1) printf("\n");
        i=n-abs(n-i);
        j=n-abs(n-j);
        i=(i>=j)?j:i;
        printf("%c",91-i);
        
    }
    return 0;
}
2017-11-23 02:48
快速回复:这个代码我感觉很好,有人可以详细的看看,给我一个完整的解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020447 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved