| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1685 人关注过本帖, 1 人收藏
标题:无聊的时候出道简单题,看看你们学的好不好
只看楼主 加入收藏
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
收藏
得分:0 
情况还不错,就是参与的人太少,新手也不来尝试,只是部分达到了我的初衷,继续等等看,可以说这道题有很多方法,我想的只有两种(水平有限),基于楼上的各位意见,方法又增加了两种,希望有更多的人参与进来

免费赠送河蟹一只
2011-08-21 14:44
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
收藏
得分:0 
难道就没有人了么

免费赠送河蟹一只
2011-08-21 15:29
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
收藏
得分:0 
这么一道既可以训练循环又可以训练数组,还能学数组转置的题目,刚学的人都不重视,只有老鸟,真是可惜

免费赠送河蟹一只
2011-08-21 18:47
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 5楼 pcbaichi
那得看你题目的描述吧,我只是按规定做事而已。

My life is brilliant
2011-08-21 19:32
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:3 
程序代码:
//给一个n*n矩阵,实现矩阵90°转置
#include<stdio.h>
int main()
{
    int n,i,j,a[100][100],temp=1;
    printf("输入矩阵的阶数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)//自动完成矩阵输入
        for(j=0;j<n;j++)
        {
            a[i][j]=temp++;
        }
    printf("原矩阵为:\n");
    for(i=0;i<n;i++)//输出原矩阵
    {
        for(j=0;j<n;j++)
        {
            printf("%-3d",a[i][j]);
        }
        printf("\n");
    }
    printf("90°转置后:\n");
    for(j=n-1;j>=0;j--)//输出转置后的矩阵
    {
        for(i=0;i<n;i++)
        {
            printf("%-3d",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}
收到的鲜花
  • pcbaichi2011-08-21 21:07 送鲜花  1朵   附言:鼓励你看过想过,能写注释

A real warrior never quits.
2011-08-21 19:58
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define getValue(array, width, rows, cols)             (*((array) + (rows) * (width) + (cols)))
#define setValue(array, width, rows, cols, value)      (*((array) + (rows) * (width) + (cols)) = (value))

int main(void)
{
    int * pRect, * pTmp;
    int   rows, cols;
    int   i, j, tmp;
   
    scanf("%u", &rows);
    cols = rows;
   
    /* or
    scanf("%u", &cols);
    rows = cols;
    */
   
    pRect = (int *)calloc(rows * cols, sizeof(int));
    pTmp  = (int *)calloc(rows * cols, sizeof(int));
   
    for(i = 0; i < rows; i++) {
        for(j = 0; j < cols; j++) {
            scanf("%d", &tmp);
            setValue(pRect, cols, i, j, tmp);
        }
    }
   
    printf("\n");
   
    for(i = 0; i < rows; i++)
        for(j = 0; j < cols; j++)
            setValue(pTmp, cols, rows - 1 - j, i, getValue(pRect, cols, i, j));
   
    memcpy(pRect, pTmp, sizeof(int) * cols * rows);
   
    for(i = 0; i < cols; i++)
        for(j = 0; j < rows || !printf("\n"); j++)
            printf("%d ", getValue(pRect, cols, i, j));
   
    free(pRect);
    free(pTmp);
    return 0;
}


[ 本帖最后由 lz1091914999 于 2011-8-21 20:23 编辑 ]
收到的鲜花
  • pcbaichi2011-08-21 21:14 送鲜花  10朵   附言:我还是比较喜欢完美的
  • pcbaichi2011-08-21 21:14 送鲜花  10朵  

My life is brilliant
2011-08-21 20:10
无诲今生
Rank: 8Rank: 8
来 自:桂林理工大学
等 级:蝙蝠侠
威 望:2
帖 子:373
专家分:726
注 册:2009-5-11
收藏
得分:3 
程序代码:
#include<stdio.h>
#define MAX 100
void main()
{
    int a[MAX][MAX],n;
    int i,j,k=1;
    scanf("%d",&n);
    printf("转置前:\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            a[i][j]=k++;
            /*
            scanf("%d",&a[i][j]);
            */
            printf("%4d",a[i][j]);
        }
        printf("\n");
    }
    printf("转置后:\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%4d",a[j][n-i-1]);
        }
        printf("\n");
    }
}

顺境逆境切莫止境,得意失意切莫在意。
2011-08-21 20:11
无诲今生
Rank: 8Rank: 8
来 自:桂林理工大学
等 级:蝙蝠侠
威 望:2
帖 子:373
专家分:726
注 册:2009-5-11
收藏
得分:0 
这种是进行直接转:
程序代码:
#include<stdio.h>
#define MAX 100
void func(int a[][MAX],int x1,int y1,int x2,int y2)
{
    int j,temp,k=0;
    if(x1>=x2)
        return;
    for(j=0;j<x2-x1;j++)
    {
        temp=a[x1+j][y1];
        a[x1+j][y1]=a[x1][y2-j];
        a[x1][y2-j]=a[x2-j][y2];
        a[x2-j][y2]=a[x2][y1+j];
        a[x2][y1+j]=temp;
    }
    func(a,x1+1,y1+1,x2-1,y2-1);
}
void main()
{
    int a[MAX][MAX],n;
    int i,j,k=1;
    scanf("%d",&n);
    printf("转置前:\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            a[i][j]=k++;
            /*
            scanf("%d",&a[i][j]);
            */
            printf("%4d",a[i][j]);
        }
        printf("\n");
    }
    printf("转置后:\n");
    func(a,0,0,n-1,n-1);
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%4d",a[i][j]);
        }
        printf("\n");
    }
}

收到的鲜花
  • pcbaichi2011-08-21 21:10 送鲜花  10朵   附言:确实比较“暴力”

顺境逆境切莫止境,得意失意切莫在意。
2011-08-21 20:50
死蜜蜂
Rank: 2
等 级:论坛游民
帖 子:16
专家分:15
注 册:2011-8-16
收藏
得分:3 
#include "stdafx.h"

int main(int argc, char* argv[])
{
  int a[3][3],i,j,k,b[3][3];

  printf("input numbers:\n");
  for(i=0;i<3;i++)
      for(j=0;j<3;j++)
          scanf("%d",&a[i][j]);
  k=2;
  for(i=0;i<3;i++)
  {
      for(j=0;j<3;j++)
          b[i][j]=a[j][k];
    k--;
  }

   for(i=0;i<3;i++)
  {
      for(j=0;j<3;j++)
          printf("%2d",b[i][j]);
      printf("\n");
  }
    return 0;
}

我就用了两个数组,但是在for语句上一个输入,一个输出,我貌似用的太频繁。。。。。
收到的鲜花
  • pcbaichi2011-08-21 21:13 送鲜花  10朵   附言:你可以试着使代码变得简洁
2011-08-21 20:56
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
收藏
得分:0 
继续加油啊各位,到目前为止还没看到我想到的那种方法

免费赠送河蟹一只
2011-08-21 21:16
快速回复:无聊的时候出道简单题,看看你们学的好不好
数据加载中...
 
   



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

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