华为OJ平台试题 ——字符串:输出数组中重复的数组

<pre name="code" class="cpp">/*
 * 题目:输出数组中重复出现的数组(0-9)
 *
 * 输入:输入一串数字,中间以逗号隔开,如3,2,2,3,5,6,7,8,9
 * 输出:输出数组中重复出现的数字(数字间以空格隔开),输出顺序按原数组中的先后顺序,输出3,2
 */

#include<stdio.h>
#include<string.h>

#define N 256

/*
 * 定义一个结构体:数字和数字个数
 */
struct CountNum
{
    int  n;
    int  count;
};

int main(void)
{
	struct CountNum  ao[N];  /* 输出数组 ao */
	int   i, ai[N],  Num = 0;  /* 输入数组 ai ,Num 输入的数字个数 */
	char  str[N];
	int   len,  j,  k = 1;

	/* 输出数组初始化 */
	for( i = 0; i< N; i++)
	{
		ao[i].n = 0;
		ao[i].count = 0;
	}
<span style="white-space:pre">	</span>/* 将数字转换成字符输入,然后把它强制转换成数字,并统计其数目 */
	gets(str);

	len = strlen(str);

	for( i =  0; i < len; i++)
	{
		if(str[i] >= '0' && str[i] <= '9')
		{
				ai[Num] = (int)(str[i] - '0');
				Num++;
		}
	}

	/* 将第一个数字赋值给输出数组a[0],便于后面进行比较 */
	ao[0].n  = ai[0];
	ao[0].count = 1;

	/*
	 * 依次将后面输入的数字与前面的第一个数字进行比较,
	 * 若是相同则其相应的count加1,若是不同将其存入后一个数组,再次进入判断时将其count加1
	 */
	for( i = 1; i < Num; i++  )
	{
		for ( j = 0 ; j < k ; j++)
		{
			if( ao[j].n == ai[i])
			{
				ao[j].count++;
				break;
			}
			else if( ao[j].n != ai[i] && j == k - 1 )
			{
					ao[k].n = ai[i];
					k++;
			}

		}

	}

	for( i= 0; i < k; i++)
	{
		if( ao[i].count >= 2 )
			printf("%d ", ao[i].n );
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 05:36:47

华为OJ平台试题 ——字符串:输出数组中重复的数组的相关文章

华为OJ平台试题 —— 字符串:名字的漂亮度

<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);">1.名字的漂亮度</span> 代码: <pre name="code" class="cpp"> #include<stdio.h> /* * 对数组a 进行排序 */ voi

华为OJ平台——统计字符串中的大写字母

题目描述: 统计字符串中的大写字母的个数 输入: 一行字符串 输出: 字符串中大写字母的个数(当空串时输出0) 思路: 这一题很简单,直接判断字符串中的每一个字符即可,唯一要注意的一点是输入的字符串可能包含空格,所以读入的时候要用nextLine()方法 1 import java.util.Scanner; 2 3 public class CountCaptial { 4 5 public static void main(String[] args) { 6 Scanner cin = n

华为OJ平台试题 —— 数组:字符串反转

字符串反转 代码: /* * 接受一个字符串,然后输出该字符串反转后的字符串. */ #include <stdio.h> #include <string.h> /* * 字符串反转函数 */ char *revstr(char *str, int len) { char *start = str; char *end = str + len - 1; char ch; if (str != NULL) { while (start < end) { ch = *start

去掉数组中重复的数字

冒泡排序语法: for (int i = 0; i < 数组长度 - 1; i++) { for (int j = 0; j < 数组长度 - i - 1; j++) { if (数组名[j] < 数组名[j + 1]) { int empty = 数组名[j]; 数组名[j] = 数组名[j + 1]; 数组名[j + 1] = empty; } } } 上面这个语法是降序排序,如果想升序的话就把if(数组名[j]<数组名[j=1])里面的小于号“<”改成大于号“>”

华为OJ:找出字符串中第一个只出现一次的字符

可以稍微让代码写的好看,不用直接写双循环的话,就可以写成函数的调用,重用性也很高. import java.util.Scanner; public class findOnlyOnceChar { public static boolean FindChar(String pInputString, char pChar){ int count=0; for(int i=0;i<pInputString.length();i++){ if(pInputString.charAt(i)==pCh

软件工程结队开发——输出一个数组中最大子数组的和

一.题目及要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 二.设计思路 程序分成两个部分: (1):找到数组中所有可能的子数组的和: 先从数组中第一个数开始算起,一直求到与它连续的的所有数的和存入数组son,然后从第二个数开始算起,求与它连续的数的和存入数组,以此类推,直至计算到最后一个数.有n个数据的数组能产生的子数组个数为n

(笔试题)把一个整数数组中重复的数字去掉

题目: 把一个整数数组中重复的数字去掉,并输出剩下的不重复的元素.(要求不能开辟新空间) 思路: 先排序,然后遍历数组比较,详见代码 代码: #include <iostream> #include <algorithm> using namespace std; int cmp(const void* a,const void* b){ return (*(int*)a-*(int*)b); } int unique(int* a,int n){ int k=0; for(int

剑指Offer面试题51(Java版):数组中重复的数字

题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复的次数.请找出数组中任意一个重复的数字. 例如如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3. 解决这个问题的一个简单的方法是先把输入的数组排序.从排序的数组中找出重复的数字是件容易的事情,只需要从头到尾扫描排序后的数组就可以了.排序一个长度为n的数组需要时间为O(nlogn)时间. 还可以利用哈希表来解决这个问题,从头到尾

输出一维环形数组中最大子数组和最大子数组的位置

组员 石鹤李海超 一.题目 输出一维环形数组中最大子数组的和 和最大子数组的位置 二.设计思想 把原数组扩大一倍,再把原数组放到后边,只需改变上次试验是循环变量即可求出最大子数组的和. 三.源代码 #include<iostream.h> #include<time.h> #include<stdlib.h> int main() { int arry[20]; int start,end,i; long sum,max; cout<<"Pleas