| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 415 人关注过本帖
标题:不知道怎么写循环 并且输出所以循环
只看楼主 加入收藏
chenlily0704
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-2-9
结帖率:50%
收藏
已结贴  问题点数:18 回复次数:6 
不知道怎么写循环 并且输出所以循环
题目要求是一组数组 1,2,3,4,5,6,7,8,9,10 将其输出并且每次往后移动两位最后回到原位。。
输出:1 2 3 4 5 6 7 8 9 10
      9 10 1 2 3 4 5 6 7 8
      7 8 9 10 1 2 3 4 5 6
      5 6 7 8 9 10 1 2 3 4
      3 4 5 6 7 8 9 10 1 2
      1 2 3 4 5 6 7 8 9 10

不知道怎么写5次循环
下面是我写的码。求教,老师要求方程的形式
#include <stdio.h>
#include <stdlib.h>

void Shift( int a[], int num){
   int temp, i,j;
   for(i=0; i<num; i++){
    temp=a[9];
   for(j=9; j>0; j--){
      a[j]=a[j-1];
   }
   a[0]=temp;
   }
}

void printArray(int a[]){
    int i, j;
  for(i=0; i<10; i++)
    //for(j=0; j<5; j++)
    printf("%d\t",a[i]);

}
int main(){
    int array[10];
    int i;
    for(i=0; i<10; i++){
        array[i]=i+1;
    }
    printArray(array);
    Shift(array, 2);
    printArray(array);
    return 0;
}


谢谢大家
搜索更多相关主题的帖子: include 
2015-03-13 08:46
afanihao
Rank: 2
等 级:论坛游民
威 望:1
帖 子:62
专家分:99
注 册:2015-3-13
收藏
得分:4 
老师说的“方程”,你听错了,是“函数”function。。。

#include <stdio.h>


void Shift( int a[], int len, int start)
{
    int i;
    for(i=0; i<len; i++)
    {
        int pos = (start + i) % len;
        printf("%2d ", a[pos]);
    }
    printf("\n");  // 一行结束
}

void main()
{
    int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int i;
    for(i=0; i<10; i++)
    {
        Shift(arr, 10, i);
    }
}

不要看谭的那本书,不然你废了。

推荐一本书:《C/C++学习指南》 http://www. ,适用C,也适合C++,一看就懂,“不可能看不懂”。在线阅读,配套答疑平台,实在不懂就直接向作者提问。专业人士编写,与企业标准对接。
2015-03-13 09:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:4 
根本听不懂你想问什么问题,你文字表达能力这么差怎么跟别人交流呢?

因为不知道你想问什么,所以我随便说说。
a. 对于一个长度为n的数组,每次后移m位,请问最少移动几次则恢复如初?
   设移动x次后恢复如初,则有 (x*m)%n = 0;
   x*m = n*y
   x = y * (n/m) 设n和m的最大公约数为g,a=n/g,b=m/g,则
   x = y * ( a*g / b*g ) = y*(a/b)
   当 y 取值为b时x最小,此时x等于a
   所以最少需要移动 n/(n和m的最大公约数) 次
   假如你老师只需要你给个移位次数,你就答“n/(n和m的最大公约数) 次”

b. 假设需要输出每一步移位,给你个参考代码
程序代码:
#include <stdio.h>

int main( void )
{
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    const size_t n = sizeof(arr)/sizeof(arr[0]); // 数组长度
    const size_t m = 2; // 每次移位长度

    for( size_t i=0; i==m || i%n!=m%n; i+=m ) // m不可以为n的整数倍
    {
        for( size_t j=i; j!=i+n; ++j )
            printf( "%d%c", arr[j%n], " \n"[j==i+n-1] );
    }

    return 0;
}

2015-03-13 09:36
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:4 
下面这应该是你想要的结果吧:
程序代码:
#include <stdio.h>
void rightmov(int *p)
{
    int i,j;
    j=*(p+9);
    for(i=9;i>0;i--)
        *(p+i)=*(p+i-1);
    *p=j;
}
int  main()
{
    int i,a[10]={1,2,3,4,5,6,7,8,9,10};
    int count;
    
    for(count = 0;count < 5;count ++)
    {
        rightmov(a);
        rightmov(a);
        for(i=0;i<10;i++)
        {
            printf("%d ",a[i]);


        }
        printf("\n");
    }
    return 0;
} 

 

授人以鱼,不如授人以渔
2015-03-13 09:49
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:0 
以下是引用执笔画江山在2015-3-13 09:49:24的发言:

下面这应该是你想要的结果吧:
#include <stdio.h>
void rightmov(int *p)
{
    int i,j;
    j=*(p+9);
    for(i=9;i>0;i--)
        *(p+i)=*(p+i-1);
    *p=j;
}
int  main()
{
    int i,a[10]={1,2,3,4,5,6,7,8,9,10};
    int count;
   
    for(count = 0;count < 5;count ++)
    {
        rightmov(a);
        rightmov(a);
        for(i=0;i<10;i++)
        {
            printf("%d ",a);


        }
        printf("\n");
    }
    return 0;
}
 

图片附件: 游客没有浏览图片的权限,请 登录注册

授人以鱼,不如授人以渔
2015-03-13 09:51
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:4 
程序代码:
#include <stdio.h>
#define N 10

void reverse(int *a, int from, int to) {
    int tmp;

    while(from < to) {
        tmp = a[from];
        a[from++] = a[to];
        a[to--] = tmp;
    }
}

void leftRotate(int *a, int n, int m) {
    m %= n;
    reverse(a, 0, m - 1);
    reverse(a, m, n - 1);
    reverse(a, 0, n - 1);
}

void prtArr(int *a, int len) {
    int i = 0;

    while(len-- > 0) printf("%d ", a[i++]);

    printf("\n");
}

int main(void) {
    int a[N], i;

    for(i = 0; i < N; i++) a[i] = i + 1;

    prtArr(a, N);

    for(i = 0; i < N / 2; i++) {
        leftRotate(a, N, N - 2);
        prtArr(a, N);
    }

    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2015-03-13 10:16
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:4 
程序代码:
#include <stdio.h>

void print(int *, int, int);
int main() {

   

    int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int t = 10;
    // 枚举起始位置
    for (int p = 0;; p -= 2) {
       

        print(a, t, p);
        if (p != 0 && ((p + t) % t) == 0) break; // 重复则退出
    }
    return 0;
}

// 输出一个环,该环的初始位置为p,周期为t
void print(int *a, int t, int p) {
   

    for (int i = 0; i < 10; i++) {
        p = (p + t) % t;
        printf("%d ", a[p]);
        p++;
       

    }
    putchar('\n');
}

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-03-13 20:45
快速回复:不知道怎么写循环 并且输出所以循环
数据加载中...
 
   



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

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