- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在 Google Kickstart 竞赛中练习,我目前正在研究 Even Digits problem from Round A of 2018 .
我创建了以下算法,当我对其进行测试时,它运行得非常好。但问题是,当我提交到平台并按下“尝试”按钮时,它显示我的输出不正确。
我尝试使用更大、更复杂的数字重新测试它,但我只是找不到问题所在。
Problem Description:
Supervin has a unique calculator. This calculator only has a display, a plus button, and a minus button. Currently, the integer N is displayed on the calculator display.
Pressing the plus button increases the current number displayed on the calculator display by 1. Similarly, pressing the minus button decreases the current number displayed on the calculator display by 1. The calculator does not display any leading zeros. For example, if 100 is displayed on the calculator display, pressing the minus button once will cause the calculator to display 99.
Supervin does not like odd digits, because he thinks they are "odd". Therefore, he wants to display an integer with only even digits in its decimal representation, using only the calculator buttons. Since the calculator is a bit old and the buttons are hard to press, he wants to use a minimal number of button presses.
Please help Supervin to determine the minimum number of button presses to make the calculator display an integer with no odd digits.
Input
The first line of the input gives the number of test cases, T. T test cases follow. Each begins with one line containing an integer N: the integer initially displayed on Supervin's calculator.
这是我的代码:
public static void Main(string[] args)
{
var SCount = Console.ReadLine();
long Count = Convert.ToInt64(SCount);
for (long i = 0; i < Count; i++)
{
var val = Console.ReadLine();
long l = Convert.ToInt64(val);
Console.WriteLine("Case #{0}: {1}", i + 1, Slover4(l));
}
}
public static long Slover4(double N)
{
char[] odds = { '1', '3', '5', '7', '9' };
double presses_p = 0;
double PN = N;
double presses_n = 0;
double NN = N;
double pdegits = -1;
for (int i = PN.ToString().Length - 1; i >= 0; i--)
{
pdegits += 1;
//2110
//2018 EVEN EVEN (ODD EVEN) ---->
//11 ODD OOD <----
//1 ODD ---->
//42 EVEN EVEN XXXXX 6969 1 | 6970 30 | 7000 -200 | 6800
#region Positives
if (i > 0 && odds.Contains(PN.ToString()[i]) &&
odds.Contains(PN.ToString()[i - 1])) // ODD - ODD
{
var val = int.Parse(string.Concat(PN.ToString()[i - 1], PN.ToString()[i]));
var lv = int.Parse(PN.ToString()[i].ToString());
//15 17 19
//5 3 1
presses_p += (5 - (lv - 5)) * Math.Pow(10, pdegits);
PN += (5 - (lv - 5)) * Math.Pow(10, pdegits);
}
else if (i != 0 &&
!odds.Contains(PN.ToString()[i - 1]) &&
odds.Contains(PN.ToString()[i])) // EVEN - ODD
{
presses_p += Math.Pow(10, pdegits);
PN += Math.Pow(10, pdegits);
}
else if (i != 0 &&
odds.Contains(PN.ToString()[i - 1])) // ODD - EVEN
{
var val = int.Parse(string.Concat(PN.ToString()[i - 1], PN.ToString()[i]));
var lv = int.Parse(PN.ToString()[i].ToString());
//10 12 14 16 18
//10 8 6 4 2 ->
//10 12 14|
//2 4 6 |
presses_p += (10 - lv) * Math.Pow(10, pdegits);
PN += (10 - lv) * Math.Pow(10, pdegits);
}
else if (i == 0 &&
odds.Contains(PN.ToString()[i])) // ODD Only
{
presses_p += Math.Pow(10, pdegits);
PN += Math.Pow(10, pdegits);
}
#endregion
#region Negatives
if (i > 0 &&
odds.Contains(NN.ToString()[i]) &&
odds.Contains(NN.ToString()[i - 1])) // ODD - ODD
{
var val = int.Parse(string.Concat(NN.ToString()[i - 1], NN.ToString()[i]));
var lv = int.Parse(NN.ToString()[i].ToString());
//11 13 15 17 19
//3 5 7 9 11
presses_n += (3 + (lv - 1)) * Math.Pow(10, pdegits);
NN -= (3 + (lv - 1)) * Math.Pow(10, pdegits);
}
else if (i != 0 &&
!odds.Contains(NN.ToString()[i - 1]) &&
odds.Contains(NN.ToString()[i])) // EVEN - ODD
{
presses_n += Math.Pow(10, pdegits);
NN -= Math.Pow(10, pdegits);
}
else if (i != 0 &&
odds.Contains(NN.ToString()[i - 1])) // ODD - EVEN
{
var val = int.Parse(string.Concat(NN.ToString()[i - 1], NN.ToString()[i]));
var lv = int.Parse(NN.ToString()[i].ToString());
//10 12 14 16 18
//2 4 6 8 10 <-
presses_n += (2 + lv) * Math.Pow(10, pdegits);
NN -= (2 + lv) * Math.Pow(10, pdegits);
}
else if (i == 0 &&
odds.Contains(NN.ToString()[i])) // ODD Only
{
presses_n += Math.Pow(10, pdegits);
NN -= Math.Pow(10, pdegits);
}
#endregion
}
//$"P:{presses_p} - N - {presses_n}";
return presses_p < presses_n ? (long)presses_p : (long)presses_n;
}
最佳答案
好吧,让我们从退化的情况开始:
2048
),我们返回0
64087
),我们返回1
现在让 left
成为最左边的奇数位 (leftDigit
) 的索引,例如
2480032581
^
left = 5 (since 2, 4, 8, 0, 0 are even)
leftDigit = 3
我们可以将初始数字变成(通过按 - 按钮)
2480028888
或者(按+键)进入
2480040000
最后,我们可以比较这两种可能性,并选择需要更少压力的一种:
"-" wants 2480032581 - 2480028888 == 3693 presses
"+" wants 2480040000 - 2480032581 == 7419 presses
按 -
是给定数字的更好策略,因此我们返回 3693
。请注意,如果 leftDigit
是 9
我们将坚持 "-"
按下(并忽略 +
策略).
C#代码:
private static long Solution(string value) {
int left = -1;
for (int i = 0; i < value.Length; ++i) {
if ((value[i] - '0') % 2 != 0) {
left = i;
break;
}
}
if (left < 0)
return 0; // All even digits number
else if (left == value.Length - 1)
return 1; // The very last digit is the only odd one
long initial = long.Parse(value.Substring(left));
int leftDigit = value[left] - '0';
if (leftDigit == 9)
return initial - long.Parse(new string('8', value.Length - left));
long plus =
long.Parse((leftDigit + 1).ToString() + new string('0', value.Length - left - 1)) -
initial;
long minus = initial -
long.Parse((leftDigit - 1).ToString() + new string('8', value.Length - left - 1));
return plus < minus ? plus : minus;
}
演示:
string[] tests = new[] {
"42",
"11",
"1",
"2018"
};
string report = string.Join(Environment.NewLine, tests
.Select(test => $"{test,6} -> {Solution(test),3}"));
结果:
42 -> 0
11 -> 3
1 -> 1
2018 -> 2
关于c# - Google Kickstart 2018 年 A 轮的 "Even Digits"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55514484/
我正在阅读 jQuery API,关于偶数选择器,jQuery 建议我们使用纯 CSS 选择器选择元素列表,然后使用 filter(":even") 以获得更好的性能。但我认为 jQuery 也针对其
jquery 中的 :nth-child(even) 和 :even 看起来很相似,但选择的元素不同。请让我知道其中的差异。 快乐编码... 最佳答案 下面是一个例子来说明差异: http://jsf
query("SELECT id, look, username, motto FROM users WHERE rank = '7'"); if($query->num_rows > 0):
我在序言中有以下奇数和偶数生成器 even(0). even(X) :- odd(Y), X is Y+1, X>0. odd(1). odd(X) :- even(Y), X is Y+1, X>1
我的问题对你来说可能听起来不同。 我是初学者,正在学习有限自动机。我正在通过互联网搜索 下面给定机器的有限自动机的正则表达式。 谁能帮我写上面机器的“有限自动机的正则表达式” 任何帮助将不胜感激 最佳
jQuery 选择 first row 作为 even (基于 0)而 CSS 选择 second row 作为 even (1基于)。是的,jQuery documentation在它的附加说明中明
PLFA 练习:如果我们在量词章节 (https://plfa.github.io/Quantifiers/) 中更“自然地”编写算术会怎样? ∃-even′ : ∀ {n : ℕ} → ∃[ m ]
面试中被问到的问题: 给定一个数组。任务是排列数组: 奇数元素占据奇数位置,偶数元素占据偶数位置。 - 元素的顺序必须保持不变。 考虑从零开始的索引。 按条件打印后,若有剩余,则原样打印剩余元素。 例
首先,抱歉英语不是我的第一语言。 *(偶数和奇数是根据索引) 我想在移动 View 中实现此表。 我尝试过的 Content 1 Head Content 2
我在my.cnf中添加了如下内容 [mysqld] max_allowed_packet=32M [mysql] max_allowed_packet=32M 而且我还在 JDBC 查询中添加了以下内
我继承了一些遗留代码,可以旋转三角形之间的边以改进拓扑分布,该算法运行良好,但计算量很大。 给定由共享一条边的两个三角形组成的四边形的伪代码是: /* split 0-2 */ score_02 =
GitHub 网络界面有一个很好的功能,可以告诉我一个分支是否与 master 分支一致。 是否有与此功能等效的命令行?我使用多个存储库,我正在寻找一种快速方法来查看分支是否均匀或需要注意。 这里是
抱歉标题太可怕了,我真的很难为我正在寻找的东西找到合适的词。我认为我想做的其实很简单,但我仍然无法真正专注于创建算法。我敢打赌,如果我不缺乏算法术语的基本知识,我可以很容易地在网上找到解决方案。 假设
我们在类里面学习数组,我被分配了这个编程项目。到目前为止,我已经编写了下面的代码,但我对如何让它正常工作感到困惑。我应该为我的代码使用带有 System.out.println 语句的 for 循环。
我正在使用 jQuery 来检查元素是奇还是偶: $("#map183").parent().is(':even'); 这将返回true或false,具体取决于元素所在的位置。 但是这总是返回 fa
我需要在 Google AppEngine(或者您可以想到任何其他哈希表)中将一堆实体存储在我需要根据顺序输入自行创建的键下。 举个例子,假设我只处理长度为一位十进制数字的键。然后我需要为键“0”存储
我试图从我的表中获取一些记录,其中 is_active = 1,但我的查询返回结果甚至是记录的 is_active = 0。我确定这是我的查询错误。 这是我的查询 SELECT `id`, `post
所以我的教授决定变聪明,为我的扑克项目设计了一手名为 EVEN STRAIGHT 的牌。这就像顺子,只是牌必须是连续的偶数。例如- 8,6,2,4,10 是偶数顺子。此外,一张 A(值为 1)可以用作
我正在编写代码,根据玩家的得分 (puntajes) 创建两个“偶数团队”。 该算法遍历球员数组并比较每个球员的得分以获得最小差异,然后将球员分为两个数组,每队一个。 这是我的代码: if (list
我试图隐藏一个不属于我的类的实现。我想通过扩展类并实现自己的接口(interface)来做到这一点。以下是我需要的类的实例是如何创建的: QueueInfo info = admin.getQueue
我是一名优秀的程序员,十分优秀!