試題 算法提高 字符串壓縮---藍橋杯

試題 算法提高 字符串壓縮

題目描述:

資源限制
時間限制:1.0s 內存限制:256.0MB
問題描述
  編寫一個程序,輸入一個字符串,然後採用如下的規則對該字符串當中的每一個字符進行壓縮:
  (1) 如果該字符是空格,則保留該字符;
  (2) 如果該字符是第一次出現或第三次出現或第六次出現,則保留該字符;
  (3) 否則,刪除該字符。
  例如,若用戶輸入“occurrence”,經過壓縮後,字符c的第二次出現被刪除,第一和第三次出現仍保留;字符r和e的第二次出現均被刪除,因此最後的結果爲:“ocurenc”。
  輸入格式:輸入只有一行,即原始字符串。
  輸出格式:輸出只有一行,即經過壓縮以後的字符串。
輸入輸出樣例
樣例輸入
occurrence
樣例輸出
ocurenc

題目很簡單,只是需要考慮全面。

AC代碼:

#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
char a[100];
char ans[100];
int book[100];//代表a字符數組中每個索引位置的字母在當前索引位置的第幾次出現
int cnt[1000];//記錄所有字符當前索引位置出現的總次數 
int main()
{
	int i;
	gets(a);//注意這個輸入,不能使用cin和scanf(因爲有空格) 
	for(i=0;i<strlen(a);i++)
	{
		if(a[i]==' ')//如果該索引位置字符爲空格,則無需計數 
			continue;
		int temp=(int)a[i];
		cnt[temp]++;
		book[i]=cnt[temp];
	} 
	int k=0;
	for(i=0;i<strlen(a);i++)
	{
		if(a[i]==' ')
			ans[k++]=a[i];
		else if(book[i]==1||book[i]==3||book[i]==6)
			ans[k++]=a[i];
	}
	for(i=0;i<k;i++)
		cout<<ans[i];
	cout<<endl;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章