给出一个整数(负数使用其绝对值),输出这个整数中的两种递减数(1.最大递减数;2.递减数中各位数之和最大的数)之和。
递减数:一个数字的递减数是指相邻的数位从大到小排列的数字,不包含相邻的数位大小相同的情况。
最大递减数:所输入整数的所有递减数中值最大的一个。 如: 75345323,递减数有:75,753,53,53,532,32。那么最大的递减数为753。
各位数字之和最大的递减数: 如75345323中的各递减数:75各位数之和=12(7+5=12),753各位数之和=15(7+5+3=15),53各位数之和=8(5+3=8),532各位数之和=10(5+3+2=10),32各位数之和=5(3+2=5)。那么各位数字之和最大的递减数为753。
输出结果=最大递减数+各位数之和最大的递减数。(1506=753+753)
#include<stdio.h> void processArr(char a[],int t) { int begin,end; int maxVal=0; int maxVal2=0; int maxSum=0; int loop; int tmpval=0,tmpsum=0; for(begin=t;begin>0;begin--) { end=begin-1; if(a[end]<a[begin]) { for(;end>=0;) { if(a[end-1]<a[end]) end--; else { tmpval=0; tmpsum=0; for(loop=begin;loop>=end;loop--) { tmpval=tmpval*10+a[loop]; tmpsum=tmpsum+a[loop]; } if(tmpval>maxVal)maxVal=tmpval; if(tmpsum>maxSum) { maxSum=tmpsum; maxVal2=tmpval;} break; } } } } printf("%d",maxVal+maxVal2); } void main() { int in; char ch[100]; int i,j,t=0,y; scanf("%d",&in); if(in<0)in=0-in; for(j=in/10,i=in%10;j!=0;in=j,j=in/10,i=in%10,t=t+1) { ch[t]=i; } ch[t]=i; /* for(y=0;y<=t;y++) { printf("%d",ch[y]); } */ processArr(ch,t); }