| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 879 人关注过本帖
标题:新手拜托大家看一看,这哪里出问题了?
只看楼主 加入收藏
神经彬
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-10-11
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
新手拜托大家看一看,这哪里出问题了?
//题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数???
程序代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int *a,n,m,i,x;
    printf("请输入数组大小:");
    scanf("%d",&n);
    a=(int*)malloc(sizeof(int)*n);//数组空间大小

    printf("请输入输入整数的个数:");
        scanf("%d",&x);
    for(i=0;i<x;i++){
        scanf("%d",&a[i]);
    }
   

    printf("请输入向后移动的个数(不许加起字符数不超过数组空间大小):");
    scanf("%d",&m);
    for(i=m;i<m+x;i++){
        a[i]=a[i-m];
    }//向后移动m位后,元素变化了位置
    for(i=m;i<x+m;i++){
        printf("%d",a[i]);
    }
    printf("\n");
    int j=0;
    for(i=m+m-1;i>m-1;i--){
        a[m+x-j-1]=a[i];
        j++;
    }//最后m个数变成最前面的m个数
    printf("变之后:");
    for(i=m;i<m+x;i++){
        printf("%d",a[i]);
    }

    return 0;
}

2016-10-11 23:45
神经彬
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-10-11
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
运行结果为什么是这样?
2016-10-11 23:46
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:1 
举个例子,有点搞不懂你要达到的目的
2016-10-11 23:54
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:1 
你的意思是12345 向右移2个 之后变成45123吗
2016-10-11 23:54
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:15 
for(i=m;i<m+x;i++){
         a[i]=a[i-m];
     }//向后移动m位后,元素变化了位置
    for(i=m;i<x+m;i++){
         printf("%d",a[i]);
     }  
     printf("\n");  //按你上面的输入 执行到这一步 得到 1 2 1 2 1 2 1 ,原来的3 4 5没了下面的代码也没意义
     int j=0;
     for(i=m+m-1;i>m-1;i--){
         a[m+x-j-1]=a[i];
         j++;         
     }//最后m个数变成最前面的m个数
    printf("变之后:");
     for(i=m;i<m+x;i++){
         printf("%d",a[i]);
     }

下面是我写的 确定需要移动那些数字,分别保存在新的数组中
#include<stdio.h>
#include<stdlib.h>

main()
{
    int a[1000],b[1000],n=0,m,i,x;
   
     printf("请输入输入整数的个数:");
         scanf("%d",&x);
     for(i=0;i<x;i++){
         scanf("%d",&a[i]);
     }
     
     printf("请输入向后移动的位数");
     scanf("%d",&m);
     for(i=x-m;i<x;i++){  //数组a最后m个数保存到数组b的前项
         b[n]=a[i];
         n++;
     }
     
     for(i=0;i<x-m;i++)
     {                     //数组a的前x-m项保存到数组b的m项之后
         b[n]=a[i];
         n++;
     }
     
     for(i=0;i<n;i++){
         printf("%-3d",b[i]);
     }
     }


早知做人那么辛苦!  当初不应该下凡
2016-10-12 13:30
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:3 
#include<stdio.h>
#include<stdlib.h>
int main()
 {
     int *a,n,m,i,x,b[1000];
     printf("请输入数组大小:");
     scanf("%d",&n);
     a=(int*)malloc(sizeof(int)*n);//数组空间大小

    printf("请输入输入整数的个数:");
         scanf("%d",&x);
     for(i=0;i<x;i++){
         scanf("%d",&a[i]);
     }
   

     printf("请输入向后移动的个数(不许加起字符数不超过数组空间大小):");
     scanf("%d",&m);
     for(i=m;i<m+x;i++){
         b[i]=a[i-m];
     }//向后移动m位后,元素变化了位置  1 2 1 2 3 4 5
   for(i=m-1;i>(-1);i--){
      b[i]=b[x+i];               
     }//最后m个数变成最前面的m个数  4 5 1 2 3 4 5
    printf("变之后:");
     for(i=0;i<x;i++){
         printf("%d",b[i]); //输出前5个
     }

     return 0;
 }

早知做人那么辛苦!  当初不应该下凡
2016-10-12 13:48
神经彬
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-10-11
收藏
得分:0 
回复 3楼 linlulu001
输入:1 2 3 4 5
输出:1 2 3 1 2
难道是我领会错题目的意思了吗
2016-10-12 16:54
神经彬
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-10-11
收藏
得分:0 
回复 4楼 word123
12345向右移动了两个后,后面两个变成了前面两个,输出就是12312.我是这样理解题目的,难道是我领会错了吗
2016-10-12 16:55
神经彬
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2016-10-11
收藏
得分:0 
回复 5楼 炎天
谢谢!一语惊醒梦中人!非常感谢!
2016-10-12 17:14
快速回复:新手拜托大家看一看,这哪里出问题了?
数据加载中...
 
   



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

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