刚刚做完的爱奇艺编程题,有没有大佬会做的??求教学~

//小C有一张票,这张票的ID是长度为6的字符串,每个字符都是数字,他想让这个ID变成他的辛运ID,所以他就开始更改ID,每一次操作,他可以选择任意一个数字并且替换它。

//如果这个ID的前三位数字之和等于后三位数字之和,那么这个ID就是辛运的。你帮小C求一下,最少需要操作几次,能使ID变成辛运ID

输入/

输入只有一行,是一个长度为6的字符串。

输出

输出这个最小操作次数

样例输入

000000

样例输出

0

Hint

输入样例2

000018

输出样例2

1

---------------------------------------------------------------------------无情分割线-----------------------------------------

我的代码,只有18%的正确率,嘤嘤嘤。。。
package aiqiyi;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int str = scan.nextInt();
int [] numarr = new int[6];
for(int i = 0; i < 6; i++){
numarr[i] = str%10;
str /= 10;
}
getDoNum(numarr);
}

public static void getDoNum(int [] numarr){
int sum;
if(numarr[0]+numarr[1]+numarr[2] == numarr[3]+numarr[4]+numarr[5]){
System.out.println(0);
}
else{
sum = doCount(numarr);
System.out.println(sum);
}

}

public static int doCount(int [] numarr){
int sum = 0;
int left = numarr[0]+numarr[1]+numarr[2];
int right = numarr[3]+numarr[4]+numarr[5];
int lack = left - right;
if(lack > 0){
if((9 - numarr[0] > Math.abs(lack)) || (9 - numarr[1] > Math.abs(lack)) || (9 - numarr[2] > Math.abs(lack))){
return 1;
}
}
return sum;
}

}




#爱奇艺##笔试题目#
全部评论
以919005为例 先对前3和后3分别排序(有序)——699005(991500也行) 然后求出双方之和的差gap(19-5=14) 然后开始凑,一次操作为较大方减一个值或者较小方加一个值 首先gap为0的直接输出0结束了 然后gap不为0的话,负数则左小右大,正数左大右小 然后开始双指针缩小gap,这里是14,先判断左边可减少的最大值(9→0)和右边可增加的最大值(0→9)谁比较大(一样大),较大方和gap比较 如果某个值大于gap的绝对值那么输出当前操作数+1返回 一样大的话随便操作一个,比如9→0,然后左指针指向下一个数,右指针不变,gap-9(5),操作数+1 下一步继续循环 题目只有6位是真的暴力拆解就可以了 我的方法适合任意位数
点赞 回复 分享
发布于 2018-09-15 12:29
我是用两边的差÷9然后如果有余数再加1,就是结果
点赞 回复 分享
发布于 2018-09-15 12:12
才6个位置,暴力求解也就,6*5*10*10+6*10,才3060次,没必要用优化的算法,直接穷举,因为该3个位置一定能让它是幸运数字,所以只用考虑该一个位置和两个位置的情况。
点赞 回复 分享
发布于 2018-09-15 12:20
贪心法 给每个数组排序left[] right[] 较小的从头开始遍历i++大的从尾部开始遍历j-- 每次取9-left[i]和right[j]较大者 大于或等于二者差距终止 否则二者差减去较大值 继续迭代
点赞 回复 分享
发布于 2018-09-15 12:28
直接暴力91%
点赞 回复 分享
发布于 2018-09-15 12:43
楼主不会以为这是送分题吧,写这么简单 我的思路是这样的:假如输入是abcxyz 记 m=a+b+c,n=x+y+z 1.最多改三个数字(m!=n),最少0个(m=n) 2.如果m!=n,就要把a,b,c和x,y,z这两组数分别排序: 如果m>n,就要把a,b,c中最大的数 s 改小为0或者把x,y,z中最小的数 t 改大为9,具体看s和9-t的大小,如果m-n<=Max(s,9-t),那么恭喜改完这次就结束了,否则,还得重新计算m和n,重复上面步骤(注意:改过的数不能再参与后续过程);m<n也是一样
点赞 回复 分享
发布于 2018-09-17 11:50
https://www.nowcoder.com/discuss/109852
点赞 回复 分享
发布于 2018-09-15 12:14
我靠你这思路有点扯啊
点赞 回复 分享
发布于 2018-09-15 12:15
0.7 不清楚为啥不A
点赞 回复 分享
发布于 2018-09-15 12:22
老哥,直接输出2就能a0.64🌚
点赞 回复 分享
发布于 2018-09-15 12:26
我是直接把前三位的数字相加 后三位的数字相加  然后这两个数相减 因为要修改数字的话 每一位最多能改成9 这样的话 两个数的差如果是小于9的话 那么修改一位就可以了 如果是在10 -18 之间就修改两位 如果在19-27之间就修改三位 差为0的话就不需要修改了
点赞 回复 分享
发布于 2018-09-15 12:43
前三个和后三个的差值,最小三个数顺序排列,差值-最小数的增长区间的值和0判断
点赞 回复 分享
发布于 2018-09-15 13:28
思路应该没差哈
点赞 回复 分享
发布于 2018-09-15 13:29
没有参加,刚写了一段供大家参考 s=list(map(int,input().split())) a=s[:3] b=s[3:] big=b if sum(b)>sum(a) else a small=a if sum(b)>sum(a) else b x=sum(big)-sum(small)      temp=big temp.sort(reverse=1) ans=0 if x==0:     pass else:     for i in range(3):         ans+=1         if sum(temp[:i])>=x:             break print(ans)
点赞 回复 分享
发布于 2018-09-15 13:56
   这道题有没有用python写的通过的大神呀,求代码呀
点赞 回复 分享
发布于 2018-09-15 16:19
#include <iostream> #include <algorithm> #include <string> #include <vector> #include <numeric> using namespace std; int getMin(vector v) { int minVal = INT_MAX; for (auto e : v) minVal = min(e, minVal); return minVal; } int calc(vector v1, vector v2) { int sum1 = accumulate(v1.begin(), v1.end(), 0); int sum2 = accumulate(v2.begin(), v2.end(), 0); if (sum1 > sum2) { swap(v1, v2); swap(sum1, sum2); } int diff = sum2 - sum1; int ret = 0; if (diff == 0) return ret; else { while (diff > 0) { int tmp = 9 - getMin(v1); auto it = find(v1.begin(), v1.end(), getMin(v1)); *it = 9; diff -= tmp; ++ret; } } return ret; } int main(int argc, char const *argv[]) { string str; cin >> str; vector v; for (auto s : str) v.emplace_back(s - '0'); vector v1(v.begin(), v.begin() + 3); vector v2(v.begin() + 3, v.end()); int res = calc(v1, v2); cout << res << endl; return 0; }
点赞 回复 分享
发布于 2018-09-15 16:24

相关推荐

无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
点赞 7 评论
分享
牛客网
牛客企业服务