【C语言】复杂数组问题

1.源代码

#include <stdio.h>
int main()
{
	int j,i=1,n,m,a[7],count=0,k=0,c=0,d=1;
	
	char b[8]="1level1";
	
	scanf("%d %d",&n,&m);
	
	while(count!=7)
	{
		{
			if(i%m==0)
	  		{
				a[k]=d;
	  			k++;
	  			count++;
	  		}
	 		if(d>=n)
	  		{
	  			d=0;
			}
	  		if(count==7)
	  		break;
	 		d++;
			i++;
	 			for(j=0;j<count;j++)
	  			{
					if(d==a[j])
	  				{	
						d=d+1;
	  					j=-1;
	  				}
	  			}
		}		
	}
	
	for(i=0;i<6;i++)
	{
		for(j=0;j<6;j++)
	 		if(a[j]>a[j+1])
	  		{
				c=a[j];
				d=a[j+1];
	 			a[j]=a[j+1];
	  			a[j+1]=c; 
	  			c=b[j];
				d=b[j+1];
	 		 	b[j]=b[j+1];
	  			b[j+1]=c; 
	  		}	 
	}	
	
	for(i=0;i<7;i++)
		printf("%d %c\n",a[i],b[i]);
	
	return 0;
}

2.代码思路

这段代码的功能是从标准输入读取两个整数n和m,然后生成一个长度为7的整数数组a和一个长度为7的字符数组b,其中a中的元素是从1到n的整数,且不重复,且每隔m个数取一个,b中的元素是"1level1"这个字符串,然后对a和b进行排序,使得a中的元素按照升序排列,b中的元素按照对应的a中的元素的位置排列,最后在标准输出打印出a和b中的元素。

这段代码的逻辑是:

  • 首先,定义了八个变量,其中j,i,n,m,count,k,c,d是整型变量,a是长度为7的整型数组,b是长度为8的字符数组,其中b的最后一个元素是空字符,用于表示字符串的结束。
  • 然后,使用scanf函数从标准输入读取两个整数,并赋值给n和m变量,这两个变量表示要生成的数组a中的元素的范围和间隔。
  • 接着,使用一个while循环,当count变量不等于7时,执行以下操作:
    • 使用一个if语句,判断i变量是否能被m变量整除,如果是,就将d变量的值赋值给a[k],然后将k变量和count变量都加一,这样就相当于将d变量的值放入数组a中,并记录放入的个数。
    • 使用另一个if语句,判断d变量是否大于等于n变量,如果是,就将d变量赋值为0,这样就相当于从头开始循环生成数组a中的元素。
    • 使用再一个if语句,判断count变量是否等于7,如果是,就使用break语句跳出循环,这样就相当于结束了数组a的生成过程。
    • 将d变量和i变量都加一,这样就相当于更新了下一个要放入数组a中的元素和下一个要判断是否能被m变量整除的数。
    • 使用一个for循环,从j=0到j<count,每次循环执行以下操作:
      • 使用一个if语句,判断d变量是否等于a[j],如果是,就将d变量加一,并将j变量赋值为-1,这样就相当于检查了数组a中是否已经存在d变量的值,如果存在,就跳过它,继续生成下一个不重复的元素。
  • 然后,使用两层for循环,从i=0到i<6,从j=0到j<6,每次循环执行以下操作:
    • 使用一个if语句,判断a[j]是否大于a[j+1],如果是,就交换a[j]和a[j+1]的值,以及b[j]和b[j+1]的值,这样就相当于对数组a和b进行了冒泡排序,使得a中的元素按照升序排列,b中的元素按照对应的a中的元素的位置排列。
  • 最后,使用一个for循环,从i=0到i<7,每次循环执行以下操作:
    • 使用printf函数打印出a[i]和b[i]的值,以及一个换行符,这样就相当于在标准输出显示了数组a和b中的元素。

这就是这段代码的功能和逻辑的解释,希望对您有帮助。😊

下面是这段代码的输出样例,假设输入的数据是:

5 2

那么输出的结果是:

1 1
2 e
3 l
4 v
5 e
0 l
0 1
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值