acm第五题

因为最近时间关系,加上看错了题目,下面的代码就只能一组输入。
先定义char 类型数组p[1000]来储存数字,int数组b[1000]存储字符转化为整形的十进制数,i代表p的字符位置,j代表b的整形位置,以n来计p的长度。
首先先判断开头数字是否连续或只有一个为0,则b[0]=0,j+1,若开头数字连续为5或者有一个为5,则i跳到不是5的那个位置。走一个for循环p[i]不是5,则吧连续不是5的数变成整形数存储在b[i]中,如果b[i]>100000000则j+1,然后再存储。如果遇到5,则就j+1,然后再回到上面循环中;如果期间出现连续的5则i+1。
已经所以数存储在b数组中,然后在比较数组中每一个的大小,以从小到大的排序分别存储下b[0],b[1],b[2]…
最后在每两个整数间加一个空格,然后输出b数组‘。

#include"stdafx.h"
#include<iostream>
using namespace std;
#include<stdio.h>
int main()
{
	char p[1000]={'0'};
	int b[1000]={0};
  int i=0, j=0,n=-1;
  while((p[++n]=getchar())!='\n')
  {
  }
  p[n]='\0';
  for(i=0;p[i]==0&&i<n;i++)
  {
	  b[0]='0';
	  if(i==0)
	  {
		  j+=1;
	  }

  }
  if(i==0)
  for(;p[i]=='5';i++)
  {
  }
  for(;i<n;i++)
  {
	  if(p[i]!='5')
	 {
		 b[j]=b[j]*10+p[i]-'0';
		 if(b[j]>100000000)
		 {
			 j++;
		 }
	  }
	  else 

		  for(;i<n;)
			 {
				
				 if(p[i+1]=='5')
					{
						i++;
				 }
				 else
				 {
					 if(i+1!=n)
					 j++;
					 break;
				 }
			 }
  }
  
  int swap;
  for(int i=0;i<=j;i++)
  {
	  for(int t=i+1;t<=j;t++)
	  {
		  if(b[i]>b[t])
		  {
			  swap=b[i];
			  b[i]=b[t];
			  b[t]=swap;
		  }
	  }
  }
  
 
  for(int i=0;i<=j;i++)
  {
	  if(i!=j)
	  cout<<b[i]<<" ";
	  else
	  {
		  cout<<b[i];
	  }
  }
  cout<<endl;
  
  
}

猜你喜欢

转载自blog.csdn.net/weixin_43792166/article/details/84876663