精华内容
下载资源
问答
  • 2022-03-21 14:40:20

    只是为了输出结果,可以强行cout

    #include<iostream>
    using namespace std;
    int main()
    {
        int N,M;
        cin>>N>>M;
        M %= N;
        int vec[N];
        for(int i = 0;i < N;i++)
        {
            cin>>vec[i];
        }
        for(int j = N - M;j < N;j++)
            cout<<vec[j]<<" ";
        for(int j = 0;j < N - M - 1;j++)
            cout<<vec[j]<<" ";
        cout<<vec[N - M - 1];
        return 0;
    }

    不行,得正规一点,得写出点逻辑:

    //注意M %= N,因为M可能大于N

    #include<iostream>
    using namespace std;
    void reverse(int vec[], int start, int end){
    	for(int i=start; i<=(start+end)/2; i++){
    		int tmp = vec[i];
    		vec[i] = vec[start+end-i];
    		vec[start+end-i] = tmp;
    	}
    }
    int main()
    {
        int N,M;
        cin>>N>>M;
        M %= N;
        int vec[N];
        for(int i = 0;i < N;i++)
        {
            cin>>vec[i];
        }
        reverse(vec, 0, N-M-1);
    	reverse(vec, N-M, N-1);
    	reverse(vec, 0, N-1);
        for(int i = 0; i < N - 1; i++)
        {
    		cout<<vec[i]<<" ";
    	}
        cout<<vec[N - 1];
        return 0;
    }

    更多相关内容
  • 主要介绍了C语言数组元素循环右移问题,本文通过多种方法给大家分享解决方案,通过实例代码讲解,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下
  • 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0​A1​⋯AN−1​)变换为(AN−M​⋯AN−1​A0​A1​⋯AN−M−1​)(最后M个数循环移至最...

    一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0​A1​⋯AN−1​)变换为(AN−M​⋯AN−1​A0​A1​⋯AN−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>
    int main()
    {
    	//将数字m向右移n位
    	int n,m,k;
    	int i,j;
    	//我写成a[n],会直接报错,好像不能这么定义,所以里面写了一个常数
    	int a[100];
    	scanf("%d %d",&n,&m);
    	//向数组中存入整数
    	for(i=0;i<n;i++)
    	{
    		scanf("%d",&a[i]);
    	}
    	for(j=0;j<m;j++)
    	{
    		//k用来存放数组最后一位数字,因为右移会造成最后一位丢失
    		//所以要先将其存储起来
    		k=a[n-1];
    		for(i=1;i<n;i++)
    		{
    			//因为数组下标是从0开始的,所以长度比n小一位
    			//右移的思想是右边的被左边替换,然后递归这个思想
    			//移动几位就调用几次
    			a[n-i]=a[n-i-1];
    		}
    		//a[0]是最左边的一位,没有左边的替换,所以要用最后一位补上
    		//而最后一位我们存在k里面
    		a[0]=k;
    	}
    	//将这个数组打印出来
    	for(i=0;i<n-1;i++)
    	{
                printf("%d ",a[i]);
    	}
    	//由题意知,最后一位后面不能有空格,所以最后一位单独打印
    	printf("%d",a[n-1]);
    	return 0;
    }

     

    展开全文
  • 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A 0 ​ A 1 ​ ⋯A N−1 ​ )变换为(A N−M ​ ⋯A N−1 ​ A 0 ​ A 1...
  • 1、数组元素循环右移问题思路:最长可能输入20位整数,long long也有可能会溢出,只能用字符串处理。注意string的每一位是一个char,做计算注意-'0'自己实现计算,准备一个进位项,由于只做翻倍,可简单判断此位>...

    1、数组元素循环右移问题

    思路:

    最长可能输入20位整数,long long也有可能会溢出,只能用字符串处理。

    注意string的每一位是一个char,做计算注意-'0'

    自己实现计算,准备一个进位项,由于只做翻倍,可简单判断此位>5进位项为1,否则为0

    由于翻倍后可能位数+1,预设翻倍后的char数组时按+1大小来开,计算结束后,通过判断最高位,将正确的char赋到字符串中去,后面用字符串来处理

    判断是否是原数的数字调换顺序,只要组成两个数的数字个数都对应即可确定。

    #include

    #include

    #include

    using namespace std;

    int main()

    {

    string ori_num;

    cin >> ori_num;

    bool isPermutation = true;

    int ori_bitnum[10] = {0};

    char *double_num = new char[ori_num.length()+1];

    if (ori_num[0] >= '5') isPermutation = false;

    char carry = '0';

    for (int i = ori_num.length(); i > 0; i--){

    double_num[i] = (ori_num[i-1] - '0') * 2 % 10 + carry;

    carry = ori_num[i-1] < '5'? '0': '1';

    ++ori_bitnum[ori_num[i-1]-'0'];

    }

    double_num[0] = carry;

    string double_numstr = carry != '0'? double_num: double_num + 1;

    if(isPermutation){

    int double_bitnum[10] = {0};

    for (int i = 0; i < ori_num.length()+1; i++){

    ++double_bitnum[double_numstr[i]-'0'];

    }

    for (int i = 0; i < 10; i++){

    if (ori_bitnum[i] != double_bitnum[i]){

    isPermutation = false;

    break;

    }

    }

    }

    printf("%s\n",isPermutation? "Yes": "No");

    cout << double_numstr;

    return 0;

    }

    2、Shuffling Machine

    思路:多开一个数组,按给定的顺序将原数组的卡片内容赋过去,如果多次操作,就将新的数组搬运到原数组中去。

    #include

    #include

    using namespace std;

    string cards[54];

    string new_cards[54];

    void copyCards(){

    for (int i = 0; i < 54; i++){

    cards[i] = new_cards[i];

    }

    }

    int main()

    {

    for (int i = 0; i < 54; i++){

    if (i < 13){

    cards[i] = "S";

    cards[i].append(to_string(i+1));

    }else if (i < 26){

    cards[i] = "H";

    cards[i].append(to_string(i-12));

    }else if (i < 39){

    cards[i] = "C";

    cards[i].append(to_string(i-25));

    }else if (i < 52){

    cards[i] = "D";

    cards[i].append(to_string(i-38));

    }else{

    cards[i] = "J";

    cards[i].append(to_string(i-51));

    }

    }

    int k;

    cin >> k;

    int order[54];

    for (int i = 0; i < 54; i++){

    cin >> order[i];

    }

    for (int j = 0; j < k; j++){

    for (int i = 0; i < 54; i++){

    new_cards[order[i]-1] = cards[i];

    }

    copyCards();

    }

    for (int i = 0; i < 53; i++){

    cout << cards[i] << " ";

    }

    cout << cards[53];

    return 0;

    }

    当你还在担心能否就业时,达内学员提前被企业录取;当你转辗于各大招聘会时,达内学员收到了高薪offer;当你在各大招聘网站投递简历时,达内学员中有人一毕业进入五百强名企。所以选择很重要。找C++培训班,选达内就对了。

    版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

    展开全文
  • 数组元素循环右移问题 (20)时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的...

    

    1008. 数组元素循环右移问题 (20)

    时间限制

    400 ms

    内存限制

    65536 kB

    代码长度限制

    8000 B

    判题程序

    Standard

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

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

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

    输入样例:

    6 2

    1 2 3 4 5 6

    输出样例:

    5 6 1 2 3 4

    提交代码

    思路分析:这个题一开始的时候由于看到条件限制说只能使用一个数组去实现,我就被他限制住了思维,一直想着去用一个数组去实现判断位置的变化,但是没有做出来,在参考了大神的代码后,瞬间就想到了这不是让你去完成一个项目,它的要求只是为了输出一个序列,所以即使你一个数组都没有用,只要你能按照一定的算法去把这个序列输出就好了。那么这个题就变得很简单了。

    用栈或者队列去解这道题就很简单,大致的思路就是判断前半部分的数据个数和后半部分数据的个数,分别压栈然后出栈就好了。

    这里还有一个坑(其实稍微细想一下就能想到的,就是如果m>n的话,数据移动的位置就不仅仅是m位那么简单了,他还需要取余运算去决定数据最后的位置。)

    分为两种情况 1.m<=n 2.m>n

    代码实现:

    #include#includeusing namespace std;

    int main(){

    int N,M;

    scanf("%d%d",&N,&M);

    int a[N];

    stacka1;

    stackb;

    for(int i=0;icin>>a[i];

    }

    if(M<=N){

    for(int i=N-M-1;i>=0;i--){

    a1.push(a[i]);

    }

    for(int j=N-1;j>N-M-1;j--){

    b.push(a[j]);

    }

    }else{

    for(int i=N-1;i>=N-(M%N);i--){

    b.push(a[i]);

    }

    for(int j=N-(M%N)-1;j>=0;j--){

    a1.push(a[j]);

    }

    }

    while(!b.empty()){

    cout

    }

    while(!a1.empty()){

    if(a1.size()==1){

    cout

    cout

    a1.pop();

    }

    return 0;

    }

    http://39.106.25.239/  个人做的项目 希望大家访问一下

    展开全文
  • 数组元素循环右移问题(20 分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A​0​​A​1​​⋯A​N−1​​)变换为(A...
  • 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0​A1​⋯AN−1​)变换为...在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序
  • PTA:数组元素循环右移问题

    千次阅读 2020-10-21 20:35:34
    数组元素循环右移问题 (20 分) 一个数组A中存有N(&gt;0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0,A1..AN-1)变换为(AN-M…AN-1,A...
  • 今天小编就为大家分享一篇解决C语言数组元素循环右移问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 1008 数组元素循环右移问题 (20 分) 输入格式 每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。 输出格式 在一行中输出循环右移M位以后的整数序列,之间用空格...
  • 1008数组元素循环右移问题(C语言)
  • 开始用了很笨的方法,要用四次循环进行移动。费劲巴拉写完,结果发现有两个用例未通过,以为是移动的过程在哪里出了错。参考大佬代码时发现,原来是M可能大于N!omg,所以一定要加上M%=N这句,怪自己考虑不周qaq ...
  • 7-2 数组元素循环右移问题 (40 分) ** 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A 0 A 1 ⋯A N−1 )变换为(A N−M ⋯A N−1 A 0 ...
  • 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0​A1​⋯AN−1​)变换为...在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序
  • PTA 7-1 数组元素循环右移问题 #include<stdio.h> #define MAXN 200 int main() { int a[200]={0};//要求空间的俩倍 int n=0;//数组中数的实际数量 int m=0;//循环往右的位次 int i;//循环变量 int j;//...
  • Python:1008 数组元素循环右移问题

    千次阅读 2019-08-10 10:22:03
    在Python中,copy的是内存地址,引用的是列表的引用地址,列表里存的是各个元素的地址 也就是说,你只要不使用copy方法来新建列表,那么原来列表中的地址是不会变的 文章目录一、题目二、代码 一、题目 二、...
  • 未必要对实际数组进行循环右移,只要输出结果表现出那样就可以 int main(){ int n = 10; scanf("%d",&n); int right; scanf("%d",&right);//右移位数 right = right%n; int a[n]; for(int i=
  • 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0​A1​⋯AN−1​)变换为...在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序
  • 剑指offer第56题 数组中数字出现的次数(位运算)剑指offer第56题 数组中数字出现的次数(位运算) 文章目录 问题一:两个只出现一次的数 问题描述: 解题思路: 代码实现: 问题二:一个只出现一次的数 问题描述: 解题...
  • PAT - B1008 数组元素循环右移问题(20分) https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808 大致思路: 按移动位数 M 将数据分组,每组每个元素循环右移 M 位(在所在组中相当于...
  • 7-1 数组元素循环右移问题 (20 分)

    千次阅读 2021-03-01 16:10:21
    7-1 数组元素循环右移问题 (20 分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A​1 ⋯A​N−1​​ )变换为(A​N−M​​ ⋯A​N...
  • 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A​0​​ A​1​​ ⋯AN−1​​ )变换为(A​N−M​​ ⋯AN−1​...在一行中输出循环右移M位

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,094
精华内容 12,437
关键字:

数组元素循环右移问题

友情链接: css3-grid-layout.rar