团体程序设计天梯赛-练习集 L1-027 出租 (20 分)

下面是新浪微博上曾经很火的一张图:

一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1index[1]=0 对应 arr[0]=8index[2]=3 对应 arr[3]=0,以此类推…… 很容易得到电话号码是18013820100

本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。

输入格式:

输入在一行中给出一个由11位数字组成的手机号码。

输出格式:

为输入的号码生成代码的前两行,其中arr中的数字必须按递减顺序给出。

输入样例:

18013820100

输出样例:

int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};

 代码如下:

#include<stdio.h>
int buttle_sortDel(int arr[],int len)  //声明一个函数用来处理电话号码,输出符合要求的不重复降序排列数字 
{
	int i,j,temp;
	for(i=0;i<len-1;i++) //冒泡排序 
	   for(j=0;j<len-i-1;j++)
	      if(arr[j]<arr[j+1]){
	      	temp=arr[j];
	      	arr[j]=arr[j+1];
	      	arr[j+1]=temp;
		  }
	int p=0,q=0;
	for(q=0;q<11;q++)  //双指针删除重复元素 
	{
		if(arr[q]!=arr[q-1])
		{
			arr[p]=arr[q];
			p++;
		}
	}
	return p;  //返回数组有效长度 
}
int find(int arr[],int len,int m)  //声明find函数用来找对应的arr下标 
{
	int i;  
	for(i=0;i<len;i++)
	{
		if(arr[i]==m)
		   return i;
	}
	return 0;
}
int main()
{
	char num[12];
	scanf("%s",num);
	int i,arr[11],arr1[11];
	for(i=0;i<11;i++)
	{
		arr[i]=num[i]-'0'; //将输入的电话号码存入数组中 
		arr1[i]=arr[i];
	}
	int len=buttle_sortDel(arr,11); //调用函数处理电话号码 
	printf("int[] arr = new int[]{%d",arr[0]);
	for(i=1;i<len;i++)
	{
		printf(",%d",arr[i]);
	}
	printf("};\nint[] index = new int[]{");
	for(i=0;i<11;i++)
	{
		printf("%d",find(arr,len,arr1[i]));  //调用函数输出对应下标 
		if(i!=10)
		   printf(",");
	}
	printf("};");
	return 0;
}

思路分析,首先要得到arr,分析题目可以知道,arr是电话号码中的数字集合(不重复)(降序排列),首先想到要用到排序算法,这里使用的是比较经典的冒泡排序,然后在删除重复数字的时候,使用的是双指针法(一定要先排序,因为使用双指针法的前提条件是有序数组)。

冒泡排序(以及其他排序算法):排序算法

双指针法(以及删除重复项的一些其他方法):删除重复项

双指针的动画演示:

最后再利用函数find来进行简单的查找就好。 


 

End

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的引用内容,这段代码是用来统计输入数字中奇数和偶数的个数的。代码中使用循环遍历输入的数字,通过对2取模运算来判断数字是奇数还是偶数,然后别对奇数和偶数的计数变量进行加一操作。循环结束后,输出奇数计数变量和偶数计数变量的值,中间用空格隔开。\[1\]\[2\]\[3\] 这段代码可以用来解决团体程序设计天梯赛-练习 L1-022 奇偶家的问题。 #### 引用[.reference_title] - *1* [PTA团队天梯赛L1-022 奇偶家](https://blog.csdn.net/m0_46492118/article/details/114481127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [PAT团队程序设计天梯赛-习题L1-022 奇偶家](https://blog.csdn.net/qq_38234015/article/details/81291913)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [团体程序设计天梯赛-练习 L1-022 奇偶家 (10)(C语言)](https://blog.csdn.net/Baridhu/article/details/109899606)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huaperion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值