精华内容
下载资源
问答
  • 本文实例讲述了ThinkPHP模板中数组循环的实现方法。分享给大家供大家参考。具体实现方法如下: ThinkPHP开发过程经常用到输出数组在模板使用,一般select出来的数据都是二维数组,我们在模板中用volist标签就...
  • B1008 数组元素循环右移问题 (20分)【C语言】 原题链接 题目虽然给出很多限制条件,比如不允许使用另外的数组,但是只要求输出最终的结果,因此不论用什么方法移动,只要结果正确即可。 **我的移动方法:**先让前N...

    B1008 数组元素循环右移问题 (20分)【C语言】

    原题链接

    题目中虽然给出很多限制条件,比如不允许使用另外的数组,但是只要求输出最终的结果,因此不论用什么方法移动,只要结果正确即可。
    我的移动方法 :先让前N-M个数字倒序,然后让后N个数字倒序,最终将整个数组倒序即可得到最终结果。(需要用到函数)
    晴神的移动方法1 :直接按题目要求输出数组的方法,比我的移动次数少了很多,更加简洁符合题目要求。
    **晴神的移动方法2:**将序列中一个元素先拿出至临时变量,然后将空出的位置将要移动到这个位置的元素代替,再把新空出的位置用将要移动到这个新空出的位置的元素代替,以此类推,直到所有元素移动完毕

    注意!

    • M可能等于0,因此要考虑M=0时直接输出整个数组。
    • M可能大于N,向右移动N个位置等同于没有移动,因此令M=M%N。
    • 最终输出结果不允许最后有空格,可以先输出第一个数字,后面的数字在循环输出时,在数字前面加上空格。

    题目描述:
    一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A ​0,A ​1,⋯,A N−1)变换为(A ​N−M,​​ ⋯A ​N−1,A 0,A 1,⋯,A ​N−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

    输入格式:
    每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。

    输出格式:
    在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

    输入样例:

    6 2
    1 2 3 4 5 6

    输出样例:

    5 6 1 2 3 4

    我的实现代码:

    #include <stdio.h>
    
    void Reverse(int A[], int left, int right)
    {
    	int i, j, t;
    	i = left;
    	j = right;
    	while(i<j){
    		t = A[i];
    		A[i] = A[j];
    		A[j] = t;
    		++i;
    		--j;
    	}
    }
    
    int main()
    {
    	int N, M, i;
    	scanf("%d %d", &N, &M);
    	int A[N];
    	for(i=0; i<N; ++i){
    		scanf("%d", &A[i]);
    	}
    	M = M % N;
    	if(M>0){
    		Reverse(A, 0, N-M-1);
    		Reverse(A, N-M, N-1);
    		Reverse(A, 0, N-1);
    	}
    	printf("%d", A[0]);
    	for(i=1; i<N; ++i){
    		printf(" %d", A[i]);
    	}
    	
    	return 0;
    } 
    

    晴神的实现代码1:

    #include <stdio.h>
    
    int main()
    {
    	int a[110];
    	int n, m, i, cnt=0;
    	scanf("%d%d", &n, &m);
    	m = m % n;
    	for(i=0; i<n; ++i){
    		scanf("%d", &a[i]);
    	}
    	for(i=n-m; i<n; ++i){
    		printf("%d", a[i]);
    		cnt++;
    		if(cnt<n) printf(" ");
    	}
    	for(i=0; i<n-m; ++i){
    		printf("%d", a[i]);
    		cnt++;
    		if(cnt<n) printf(" ");
    	}
    	
    	return 0;
    }
    

    晴神的实现代码2:

    #include <cstdio>
    
    int gcd(int a, int b){ //a,b的最大公约数 
    	if(b==0) return a;
    	else return gcd(b, a%b);
    }
    
    int main()
    {
    	int a[110];
    	int n, m, temp, pos, next;
    	//temp为临时变量,pos存放当前处理的位置,next为下一个要处理的位置
    	scanf("%d %d", &n, &m);
    	for(int i=0; i<n; ++i){
    		scanf("%d", &a[i]);
    	}
    	m %= n;
    	if(m!=0){
    		int d = gcd(n, m);
    		for(int i=n-m; i<n-m+d; ++i){ //按最大公约数确定要遍历移动的数字范围 
    			temp = a[i]; //temp存储开始位置的元素 
    			pos = i; //pos记录当前处理的位置 
    			do{
    				next = (pos-m+n) % n; //计算除移动后该位置应该放置的元素 
    				if(next!=i) a[pos] = a[next]; //若不是初始位置,则将元素放过来 
    				else a[pos] = temp; //若是初始位置,则将temp中的变量放过来 
    				pos = next; //处理位置移动 
    			}while(pos!=i); //循环直到初始元素找到应该待的位置 
    		}
    	}
    	for(int i=0; i<n; ++i){
    		printf("%d", a[i]);
    		if(i<n-1) printf(" ");
    	}
    	
    	return 0;
    }
    
    展开全文
  • next数组在求解的过程用到了KMP的思想,当前失配了,就回溯到上一个next,请见 j=next[j] ,先说个结论,如果到位置 i ,如果有 i%(i-next(i))==0 , 那说明字符串开始循环了,并且循环到 i-1 结束,为什么...

        KMP算法在字符串的模式匹配中有比较广泛的用途,有时我们会遇到字符串中存在循环节的问题,那么就next数组中的循环节问题,我们来简单的说一下。    

    首先我们知道next数组的求法:

    void init_next()
    {
        int i=0,j=-1;
        next[0]=-1;
        while(i<len)
        {
            if(j==-1||T[i]==T[j])
            {
                i++;
                j++;
                next[i]=j;
            }
            else j=next[j];
        }
    }


        讲解之前先说个结论:对于字符串的某一位置i ,如果有 i%(i-next[ i ])==0 , 则说明字符串开始循环了,并且循环到 i-1 结束,至于为什么这样呢:

        我们先假设到达位置 i-1 的时候,字符串循环了(到i-1循环完毕),那么如果到第i个字符的时候,失配了,根据next数组的求法,我们是不是得回溯?然而回溯的话,由于字符串是循环的了(这个是假定的),next[i] 是不是指向上一个循环节的后面一个字符呢?答案是肯定的,而上一个循环节的末尾是 next[i]-1 ,然后现在循环节的末尾是 i-1 ,然么循环节的长度是多少呢?

        所以,我们有 (i - 1) - ( next[i] - 1 ) = i - next[i]  就是循环节的长度(假设循环成立的条件下),但是我们怎么知道这个循环到底成立吗?

        现在我们已经假设了 0到i-1 循环了,那么我们就一共有i 个字符了,如果有 i % ( i - next[i] ) == 0,总的字符数刚好是循环节的倍数,那么说明这个循环是成立的。

    注意还有一点,如果 next[i] == 0,即使符合上述等式,这也不是循环的,举个反例

    0   1    2   3   4   5

    a    b   c   a   b   d

    -1   0   0   0   1   2 

    下标为1,2,3的next值均为0,那么 i%(i-next[i])=i%i==0,但是这个并不是循环。

    解释完毕,然后再来看下,为什么求出来的循环节长度是最小的呢?

    因为next数组失配的时候,总是回溯到最近的循环节,所以i-next[i]就是最小的循环节长度

        为什么求出来的循环次数是最多的呢?

        循环节长度是最小的了,那么循环次数肯定是最多的了。

    总结一下,如果对于next数组中的 i, 符合 i % ( i - next[i] ) == 0 && next[i] != 0 , 说明字符串循环,而且

    循环节长度为:   i - next[i]

    循环次数为:     i / ( i - next[i] )

    展开全文
  • 小程序中进行列表循环的时候,如果有嵌套列表循环中,就需要解决默认的index和item 别名的问题 这是我在工作中做的一个品牌筛选列表 其中遇到了要嵌套循环 brandList,进行列表渲染 在小程序中,默认数组的...

     

    小程序中进行列表循环的时候,如果有嵌套列表循环中,就需要解决默认的index和item 别名的问题

    这是我在工作中做的一个品牌筛选列表

     

    其中遇到了要嵌套循环 brandList,进行列表渲染

    在小程序中,默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item。

    这时候就需要用到 wx:for-index  和 wx:for-item 来解决

    <view wx:for="{{brandList}}" id="{{'brand_'+e_index}}" wx:for-item="e" wx:for-index="e_index" wx:key="e_index" index="{{e.firstLetter}}">
        
        <view class="item-title">{{e.firstLetter}}</view>
    
        <view class="item-brand "  wx:for="{{e.list}}" wx:key="index" wx:for-item="i" wx:for-index="i_index" data-id="{{i.code}}" data-name="{{i.name}}"  >
    
            <van-checkbox use-icon-slot value="{{ i.brand_checked }}" data-group_index="{{e_index}}" data-item_index="{{i_index}}" bind:change="onBrandSelectChange">
                <image slot="icon" class="radio-image" mode="widthFix" src="{{ i.brand_checked ? icon.active : icon.normal }}" />{{i.name}}
            </van-checkbox>
              
        </view>
    </view>

    使用 wx:for-item 可以指定数组当前元素的变量名,

    使用 wx:for-index 可以指定数组当前下标的变量名:

    展开全文
  • 用printf函数、数组循环结构输出特殊图形  printf函数是C语言最常用到的函数之一。下面通过三个例子总结如何使用printf函数和其它函数输出一些图形,例子出现的顺序是由简单到复杂。 示例1:输出一个如下...

       -----------android培训java培训、java学习型技术博客、期待与您交流!------------ 

    用printf函数、数组和循环结构输出特殊图形

         printf函数是C语言中最常用到的函数之一。下面通过三个例子总结如何使用printf函数和其它函数输出一些图形,例子出现的顺序是由简单到复杂。


    示例1:输出一个如下的菱形  

                   *   
         ***    
        *****   
      *******  
    *********
      ******* 
       *****   
         ***   
           *     

    程序如下:

    #include<stdio.h>
    #include<stdlib.h>
    void main()
    {
    printf("        *      \n");
    printf("      ***    \n");
    printf("    *****   \n");
    printf(" *******  \n");
    printf("*********\n");
    printf("  ******* \n");
    printf("   *****   \n");
    printf("     ***    \n");
    printf("       *     \n");
    system("pause");
    }


    示例2:输入正整数n<=20,输出一个n层的倒三角形。

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
    int n;
    scanf_s("%d", &n);


    char a[200][200] = {"\0"};
    for (int i = 0; i < n;i++)
    for (int j = i; j < 2 * n - i - 1; j++)
    {
    a[i][j] = '#';
    }
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < 2 * n - 1; j++)
    {
    printf("%c", a[i][j]);
    }
    printf("\n");
    }
    system("pause");
    return 0;

    }

    示例3:给定正整数n和m,输出n*m的矩形图案,要求图形最外层由‘#’构成,里层由‘*’构成。

    输入格式:第一行为行为测试数据T(T<=20),表示一共要输入多少组数据进行测试;

                        第二行为n m,表示长方形的长和宽。

    输入样例:

    3

    1 1

    2 2 

    3 3

    输出样例:

    #


    ##

    ##


    ###

    #*#

    ###

    程序如下:

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
    int T, M[20], N[20];
    scanf_s("%d", &T);
    for (int i = 0; i < T; i++)
    {
    scanf_s("%d", &M[i]);
    scanf_s("%d", &N[i]);
    }
    for (int i = 0; i < T; i++)
    {
    for (int j = 0; j < M[i]; j++)
    {
    for (int k = 0; k < N[i]; k++)
    {
    if (j == 0 || j == M[i] - 1 || k == 0 || k == N[i] - 1)
    printf("#");
    else
            printf("*");
    }
    printf("\n");
    }
    }
    system("pause");
    return 0;
    }


        综上三个例子,我们可以看出,当要求输出一个小范围特定的图形是,我们可以直接把图像原样写入到printf函数中即可,但当要求输入一个任意行的图形是,我们只能通过寻找规律,利用循环来写相应的程序。以上两种都属于比较简单的情形,当要求输入T个图形,每个图形有n行m列时,无疑增加了我们的难度,这时我们就不得不用数组了,如示例三,我们能想到用数组,但是用二维数组呢?还是用三维数组呢?或者一维数组就可以完成输出?我们最简单的做法是先假设它只有一个图形(即循环的内层是只有一个图形的情形),那么我们再对这个图形的每一行每一列进行for循环,看它是否满足条件,满足则执行循环,不满足则不执行。这三个例子主要是为了探讨和说明到底怎样用数组使程序更简洁易懂。

    (本人初学者,C语言的学习还存在很多的疑惑,本文如有错误和需要改进的地方望大家指出!)感谢您的阅读!





    展开全文
  • 在项目用到json解析,有以下的json数组 其中replyLeaveWords为嵌套的子json数组,可以一直循环嵌套下去 我需要取出这些嵌套的子json数组,和外面的主json数组再组成一个新的json数组 于是找到下面两种方式...
  • 编写高质量代码改善C#程序的157个... 软件开发过程,不可避免会用到集合,C#的集合表现为数组和若干集合类。不管是数组还是集合类,它们都有各自的优缺点。如何使用好集合是我们在开发过程必须掌握的技巧。不...
  • C#程序编写高质量代码改善的157个建议【16-19】[动态数组循环遍历、对象集合初始化] 前言  软件开发过程,不可避免会用到集合,C#的集合表现为数组和若干集合类。不管是数组还是集合类,它们都有...
  • 数组队列及循环队列

    2019-10-03 16:02:53
    java数据结构之----数组队列及循环队列 数据结构与算法学习的第二篇 什么时候需要用到队列 队列在实际开发过程运用的非常广泛,由于我也是学习基础,还没有开发过什么项目,所以用到时候就知道了 什么是队列 ...
  • 1.数组是非常有用的,说数组就会用到的是循环 for循环: for(let i=0;i<arr.length;i++){}while循环2.ES6新增的循环arr.forEach()-------代替普通的 for 循环arr.map()----------非常有用,做数据交互“映射” ...
  • for循环遍历数组和foreach遍历数组

    千次阅读 2018-07-23 19:26:18
    for循环和foreach循环都可以遍历整个数组,但什么时候...如果知道数组的个数就用for循环,因为for循环用到数组的索引值,而foreach没有用到数组的索引值,所以当不知道数组的个数时就用foreach遍历整个数组。...
  •  软件开发过程,不可避免会用到集合,C#的集合表现为数组和若干集合类。不管是数组还是集合类,它们都有各自的优缺点。如何使用好集合是我们在开发过程必须掌握的技巧。不要小看这些技巧,一旦在开发使用了...
  • 日常工作,我们经常会用到循环遍历数组元素。不考虑只能使用某一特定方式的情况下,有人喜欢用数组下标遍历,有人则喜欢用指针遍历。那么这两者是否有性能差异呢?我们先来看两个例子:代码一:/* a.c */#include ...
  • 日常工作,我们经常会用到循环遍历数组元素。不考虑只能使用某一特定方式的情况下,有人喜欢用数组下标遍历,有人则喜欢用指针遍历。那么这两者是否有性能差异呢?我们先来看两个例子:代码一:/* a.c */#include ...
  • splice可以说是最强大的数组方法了,splice用途有很多种,我们在这里用到的是splice的删除。 splice()方法始终都会返回一个数组,并且数组中包含了从原始数组删除的项。 话不多说,让我们直接开始上代码: var ...
  • 这个数组可以看做新手学习,从一维数组 到 多维 数组 循环渐进,其实看起也很简单,一看便知,众所周知,一维、二维或许经常用到用到二维以上应该就很少了。public class test {public static void main(String[] ...
  • 数组

    2019-09-18 10:15:04
    目标: 1.理解数组的作用 2.掌握数组的概念 3.掌握数组的基本使用 4.掌握数组的常用操作 ...因为在这个过程中,循环中的成绩变量是临时的,无法作为后 续复用。所以我们需要寻求存储数据的新方式! ...
  • 最近在用tp3.2框架,在查询的时候用到了select(),这条语句返回的是二维数组,所以在对返回的数据做处理时,遇到了些麻烦,百度了下foreach,终于用foreach解决了数据的筛选问题 (因为不知道该怎么设置where条件,...
  • 今天遇到一个问题,在商品详情页需要循环遍历获取表格的,,,,,, 因此用到了二维循环,找大神帮忙解决了这个问题, 记录一下代码: 因为需要加载完成后才会执行,所以写了个延迟~ var t=function(){...
  • JavaScript中数组

    2020-09-11 16:27:59
    我们要用到循环 但是循环好像做不了,因为无法去控制变量a1,a2, 也就是说无法将循环变量和变量a1,a2联系起来 这段代码能够实现同样的功能,而且如果是100人的话, 只需要把循环的条件改成i<100即可,整个程序...
  • 所以我偷偷看了有赞的源码,了解了它的思想:给每一项增加唯一标识符,新建一个数组用于存放需要展开项的唯一标识符,在节点判断数组中是否存在当前点击展开的标识符,存在则展开,隐藏则是出栈当前的标识符 ...
  • 一般删除数组中的某个对象或元素,我们会用到splice,如: const arr = [1, 2, 3, 4, 5] arr.splice(0, 1) // [2, 3, 4, 5] 如果要删除某个指定的对象或元素,如,删除3: const arr = [1, 2, 3, 4, 5] arr.splice...
  • 5. 循环排序(Cyclic Sort)基本原理及应用场景循环排序模式描述了一种解决包含给定范围数字的数组问题的有趣方法。具体来说,我们遍历数组的每一...在以下场景,我们可能会用到循环排序模式:问题涉及给定范围的排...
  • 本篇博客所涉及到的代码,均已...本篇博文,将通过数组,单向循环链表两种方式,使用Java实现队列, 帮助大家进一步了解队列这种数据结构 本篇博客要点如下: 队列 基本概念 存储结构 顺序存储结构 链式存储结构 使...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 910
精华内容 364
关键字:

数组用到循环中