Lucy自尊心强,要是某个月的工资比前一个月少了,她就会哭。
现在依次告诉你Lucy未来几个月的薪水(单位:万元),而你是一个来自未来的黑客,你可以改变某一个月公司给她发放的薪水,让她不会因为薪水而哭。
举个例子:你知道了Lucy连续四个月的薪水0 4 2 3你可以改变第二个月的工资为1,那她就不会哭了。
第一行一个整数n(n>0&&n<=12); 第二行n个月的工资(保证都为10以内的非负整数);
你是否能让她不哭; 是,输出YES; 否,输出NO;
4 0 4 2 3
YES
1 #include<stdio.h> 2 int a[103]; 3 int main(){ 4 int n; 5 scanf("%d",&n); 6 for(int i=1;i<=n;i++){ 7 scanf("%d",&a[i]); 8 } 9 for(int i=1;i<n;i++){ 10 if(a[i]>a[i+1]){//如果顺序没有按照升序排列 11 if(a[i-1]>a[i+1]){//依情况该值 12 a[i+1]=a[i]; 13 } 14 else{ 15 a[i]=a[i+1]; 16 } 17 break; 18 } 19 } 20 for(int i=1;i<n;i++){//改完一个值后,如果发现还有不按顺序的,那么就是NO 21 if(a[i]>a[i+1]){ 22 printf("NO"); 23 return 0; 24 } 25 } 26 printf("YES");//都按顺序了就是YES 27 return 0; 28 }
这道题呢,如果在这一串数里有两个或两个以上的降序过程,也就是像这样的序列
例一:4 3 2 4到3降序了,3到2降序了
例二:1 5 4 2 1 5到4降序了,4到2降序了,2到1降序了
例三:1 9 4 8 3 9到4降序了,8到3降序了
这样的序列光改一个数是没办法让序列按升序排列的(在这里,我把相等的情况也算作升序排列了),所以这样的情况就是没救了,一定是NO。
那如果所有数都是按升序排列的,那一定就是YES了,
接下来就剩下一种情况,那就是只有一个降序过程的序列,像这样:
例一:4 1 3 4到1是降序
例二:3 4 2 3 4到2是降序
例三:1 4 2 6 4到2是降序
这样的情况稍复杂一些,有些情况是YES,有些情况是NO
原文:https://www.cnblogs.com/fate-/p/12500581.html