数组元素、方阵循环右移以及打印多组杨辉三角

7-70 数组元素循环右移

从键盘接收两个整数m和n,分别表示一维整型数组的元素个数,和要向移动的位数。已知00。

在用户输入m和n后,第二行输入相应个数的数组元素。

程序要实现的功能是,让数组元素往右移动n位

例如,数组的5个元素是:1,2,3,4,5。

往右移动1位后:5,1,2,3,4

往右移动2位后:4,5,1,2,3

输入格式:

第一行输入两个整数,第二行输入数组元素。

输出格式:

移动后,数组的每一个元素,注意每个数组元素后有且仅有一个空格。

输入样例:

第一行的数据5和2,表示数组容量为5,让数组元素往右移动2个位置。

第二行是数组的每一个元素的值。

5 2
1 2 3 4 5 

输出样例:

输出移动后的数组元素值,注意每个元素后有且仅有一个空格。

4 5 1 2 3 
#include
int main()
{
    int m,n;
    scanf("%d %d",&m,&n);
    int i,a[100];
    for(i=0;im)
        n=n%m;      /*循环有周期,当n>m时,只需要n对m求余即可就像周期函数一样*/
    for(i=m-n;i

       对于这个题目,我们可以发现规律,右移n位,也就是数组最后的n位被放在最前面,就像一个数组a[5]={1,2,3,4,5},如果右移2位的话就是让a[3],a[4](我们可以注意到下标3就是元素个数减去右移个数)放在a[0],a[1],a[2]的前面,于是我们得到结果4,5,1,2,3,所以我们只需要先打印后n位再打印前n位即可。

7-5 方阵循环右移

       通过刚才的一维数组循环右移,我们可以发散一下,看看二维数组循环右移,简单说二维就是在一维的基础上多加一层行的循环。

本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。

输入格式:

输入第一行给出两个正整数m和n(1≤n≤6)。接下来一共n行,每行n个整数,表示一个n阶的方阵。

输出格式:

按照输入格式输出移动后的方阵:即输出n行,每行n个整数,每个整数后输出一个空格。

输入样例:

2 3
1 2 3
4 5 6
7 8 9

输出样例:

2 3 1 
5 6 4 
8 9 7 

       看过一维数组循环右移,这个题目就很简单了,我们可以把方阵的每一行看成一个一维数组,然后遍历方阵的每一行,把方阵的每一行按照一维数组循环右移即可。

#include
int main()
{
    int m,n;
    scanf("%d %d",&m,&n);
    int i,j,a[n][n];
    for(i=0;in)
        m=m%n;
    for(i=0;i

 

7-52 sdut-C语言实验- 杨辉三角

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
上面的图形熟悉吗?它就是我们中学时候学过的杨辉三角。
杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

21世纪以来国外也逐渐承认这项成果属于中国,所以有些书上称这是“中国三角形”(Chinese triangle)。

其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而杨辉三角的发现就是十分精彩的一页。

让我们开始做题吧!

输入格式:

输入数据包含多组测试数据。
每组测试数据的输入只有一个正整数n(1≤n≤30),表示将要输出的杨辉三角的层数。
输入以0结束。

输出格式:

对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。

输入样例:

2
3
0

输出样例:

1
1 1

1
1 1
1 2 1


       我们可以把杨辉三角当成一个二维数组来处理,可以发现规律,杨辉三角的第n行有n个数,知道这一点就可以减少循环次数,然后我们可以看到每个数字,假设这个数组元素的下标为[i][j],那么这个数组元素的值等于下标为[i-1][j]和[i-1][j-1]的元素之和,这样就不难写出相应语句了。

#include
int main()
{
    int a[10000][1],b[30][30]={0};
    int i,m,k,p=0;
    for(i=0;i<100;i++)
    {
        scanf("%d",&a[i][0]);
        if(a[i][0]==0)
        {
            break;
        }
        p=a[i][0];
        for(m=0;m

欢迎大家积极留言呀!

 

你可能感兴趣的:(算法,数据结构,c#)