RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-389601

Павел Спасский's questions

Martin Hope
Pavel
Asked: 2024-08-26 17:47:31 +0000 UTC

C#:一行解决方案和 While 循环

  • 6

在控制台输入时,用户输入从 0 到 long 左右的任何数字。Max 该数字放置在秤的左盘上。三者的力量需要平衡这些天平。嗯,就是如果输入的是7,那么我们在7的左边放3,右边放9和1,权重不能重复。也就是说,您不能两次输入 1。

目标是用最短的线路解决这个问题。它有多难读并不重要。

到目前为止,我已经能够得到这个三行解决方案:

List<List<long>> weights = new List<List<long>> { new List<long> { long.Parse(Console.ReadLine()) }, new List<long>() };
while (weights[0].Sum() != weights[1].Sum()) weights[weights[0].Sum() > weights[1].Sum() ? 1 : 0].Add((long)Math.Pow(3, ((Func<long, long, bool>)((number, power) => number > (long)((Math.Pow(3, power) - 1) / 2)))(weights[0].Sum() > weights[1].Sum() ? weights[0].Sum() - weights[1].Sum() : weights[1].Sum() - weights[0].Sum(), ((Func<long, long>)(number => (long)Math.Ceiling(Math.Log(number, 3))))(weights[0].Sum() > weights[1].Sum() ? weights[0].Sum() - weights[1].Sum() : weights[1].Sum() - weights[0].Sum())) ? ((Func<long, long>)(number => (long)Math.Ceiling(Math.Log(number, 3))))(weights[0].Sum() > weights[1].Sum() ? weights[0].Sum() - weights[1].Sum() : weights[1].Sum() - weights[0].Sum()) : ((Func<long, long>)(number => (long)Math.Ceiling(Math.Log(number, 3))))(weights[0].Sum() > weights[1].Sum() ? weights[0].Sum() - weights[1].Sum() : weights[1].Sum() - weights[0].Sum()) - 1));
Console.WriteLine(JsonSerializer.Serialize(weights));

我相信你想要的可以使用 Linq 的 Agreggate 方法或使用 lambda 来实现,但是 while 的存在非常令人困惑。是否可以用它做点什么?

这是我最初的解决方案,我试图将其压缩为一行:

 class Program
 {
     static void Main(string[] args)
     {
             long weight = long.Parse(Console.ReadLine());
             List<List<long>> weights = new List<List<long>>
             {
                 new List<long>(),
                 new List<long>()
             };
             weights[0].Add(weight);
             FindThreeDegreeWeights(weights);
             Console.WriteLine(JsonSerializer.Serialize(weights));            
     }

     static long MinPowerOfThreeNotLessThan(long number)
     {
         long power = (long)Math.Ceiling(Math.Log(number, 3));
         return power;
     }

     static bool IsNumberGreaterThanSumOfPreviousPowersOfThree(long number, long power)
     {
         long sum = (long)((Math.Pow(3, power) - 1) / 2);
         return number > sum;
     }

     static void FindThreeDegreeWeights(List<List<long>> weights)
     {
         long leftSum = weights[0].Sum();
         long rightSum = weights[1].Sum();

         if (leftSum == rightSum)
             return;

         if (leftSum > rightSum)
         {
             long difference = leftSum - rightSum;
             long upperDegree = MinPowerOfThreeNotLessThan(difference);
             if (IsNumberGreaterThanSumOfPreviousPowersOfThree(difference, upperDegree))
             {
                 weights[1].Add((long)Math.Pow(3, upperDegree));
             }
             else
             {
                 weights[1].Add((long)Math.Pow(3, upperDegree - 1));
             }
         }
         else
         {
             long difference = rightSum - leftSum;
             long upperDegree = MinPowerOfThreeNotLessThan(difference);
             if (IsNumberGreaterThanSumOfPreviousPowersOfThree(difference, upperDegree))
             {
                 weights[0].Add((long)Math.Pow(3, upperDegree));
             }
             else
             {
                 weights[0].Add((long)Math.Pow(3, upperDegree - 1));
             }
         }
         FindThreeDegreeWeights(weights);
     }
 }
c#
  • 2 个回答
  • 160 Views
Martin Hope
Pavel
Asked: 2024-08-12 14:40:44 +0000 UTC

CodeGolf - 如何调用在 Linq 中调用它的对象?

  • 5

有如下代码:

var data = JsonSerializer.Deserialize<int[]>(Console.ReadLine()).ToList();
Console.Write(data.Zip(data.Skip(1), (f, s) => f == s).Count(x => x));

它工作正常,但可以进一步缩短吗?我调用“data”变量两次。首先,对其调用 Zip 方法,然后它充当该方法中的参数。是否可以以某种方式在方法中指定调用该方法的对象应作为参数?或者也许这里可以通过调用另一个方法来完成一些事情?一般来说,是否可以一行解决这个问题?

代码解决的问题在这里:

您有一个包含用户输入数据的数据变量。 data - 整数元素列表。编写一个代码来查找连续相同数字的系列数。将结果写入结果变量。例如,在这样的列表中 [1, 2, 2, 3, 3, 3, 4, 4, 4, 4] - 6 集

c#
  • 2 个回答
  • 108 Views
Martin Hope
Pavel
Asked: 2024-07-16 22:22:00 +0000 UTC

更改组合框背景

  • 6

是否可以通过简单的方式设置唯一的 ComboBox 背景颜色,以及多个 ComboBox 的下拉列表背景颜色?我找到了一个可以更改系统颜色的选项,但在这种情况下,颜色会同时为每个人更改,而不是为某个特定的颜色更改。或者标准的 ComboBox 中没有这样的东西,你需要自己编写?

c#
  • 1 个回答
  • 59 Views
Martin Hope
Pavel
Asked: 2024-07-10 21:49:06 +0000 UTC

从 XAML 端连接到命令的最佳方式是什么?

  • 6

我通常像这样进行绑定 - Command="{Binding SomeCommand}",其中 SomeCommand 是来自 DataContext 的命令。

但在这个教育项目https://github.com/xellans/LearnMvvm.git中,我遇到了一个对我来说不寻常的选项

<RadioButton Command="{local:SetCurrentContext}" CommandParameter="PersonVM" Content="{DynamicResource Lang1}"></RadioButton>

这是绑定命令的可接受的方式吗?哪种方法被认为更正确?

c#
  • 1 个回答
  • 46 Views
Martin Hope
Pavel
Asked: 2024-07-02 18:29:12 +0000 UTC

DataGridComboBoxColumn - 如何将命令绑定到值更改?

  • 6

有一个 DataGrid,其中指定了 DataGridComboBoxColumn 列。如何绑定命令来更改其中选定元素的值?我通过Interaction.Triggers尝试过,但它似乎不适用于DataGridComboBoxColumn。

我使用触发器尝试了这样的操作:

<DataGridComboBoxColumn .. >
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding DataContext.ChangeCategoryCommand, RelativeSource={RelativeSource AncestorType=UserControl}}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</DataGridComboBoxColumn>

但它不起作用,尽管命令和它的路径写得正确。此绑定与表单上的其他事件一起使用。

作为解决方法,我通过窗口本身的事件处理程序来完成此操作。

 <DataGridComboBoxColumn.EditingElementStyle>
     <Style TargetType="ComboBox">
         <EventSetter Event="SelectionChanged" Handler="ComboBox_SelectionChanged"/>

private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    (DataContext as RegistryDeviceViewModel).ChangeCategoryCommand.Execute(sender);
}

但这是 MVVM 模式中不好的风格,不是吗?如何正确附加命令来更改 DataGridComboBoxColumn 中的选择?

c#
  • 1 个回答
  • 18 Views
Martin Hope
Pavel
Asked: 2024-03-07 20:06:40 +0000 UTC

使用多个显示器时的自定义标题。确定鼠标光标的绝对坐标

  • 5

问题的本质是:WPF 窗口有一个自定义标头而不是标准标头。

<Window ...
        WindowStyle="None"/>    
    <ScrollViewer VerticalScrollBarVisibility="Auto"
                  HorizontalScrollBarVisibility="Auto">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="30"/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Grid MouseLeftButtonDown="DragMove_MouseLeftButtonDown"                   
                  x:Name="HeaderGrid">
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
        <TextBlock></TextBlock>
        <Button x:Name="btnMinimize" Content="🗕" Style="{StaticResource HeaderButton}"
               
                
                Click="btnMinimize_Click"
                />
        <Button x:Name="btnMaximize" Content="🗖" Style="{StaticResource HeaderButton}"
                
                
                Click="btnMaximize_Click"
                />
        <Button x:Name="btnClose" Content="❌" Style="{StaticResource HeaderButton}"
                FontWeight="Light"
                FontSize="16"
                Click="btnClose_Click"
                Margin="0 0 5 0"
                />
    </StackPanel>
</Grid>

我们需要重现标准窗口标题的行为。也就是说,您可以拖动它,并且在窗口最大化的情况下,通过单击它,它会恢复到正常大小并位于鼠标光标下方。一台显示器一切正常。

        private void DragMove_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (WindowState == WindowState.Maximized)
            {
                WindowState = WindowState.Normal;
                System.Windows.Point mousePosition = Mouse.GetPosition(this);
                Top = mousePosition.Y;
                Left = mousePosition.X - (Width / 2) + (1920 * GetCurrentScreenNumber());
            }
            DragMove();
        }
        
        public int GetCurrentScreenNumber()
        {
            System.Drawing.Point cursorPosition = System.Windows.Forms.Control.MousePosition;
            Screen screen = Screen.FromPoint(cursorPosition);
            return Array.IndexOf(Screen.AllScreens, screen);
        }

对于两个人来说,这种方法的一切都会变得更加复杂。到目前为止,我已经能够在主显示器位于左侧的情况下实现两个显示器的相对正确的操作。

但如果有 3 个或更多屏幕怎么办?是否有任何选项可以确定光标坐标不是当前屏幕的相对坐标,而是绝对坐标?毕竟,给出的示例效果很好,这意味着存在某种屏幕坐标的绝对网格?我怎样才能从中获取坐标?或者还有其他方法可以解决这个问题吗?

PS:在WPF中,据我了解,没有获取鼠标坐标的机制,你必须从Winforms中拖动它们?

c#
  • 1 个回答
  • 33 Views
Martin Hope
Pavel
Asked: 2024-02-28 15:38:21 +0000 UTC

WPF:如何在DataGrid中绑定SystemColors?

  • 5

该应用程序使用显示行的 DataGrid。任务是确保选定的 SelectedItem 行以颜色显示,无论 DataGrid 当前是否可用。同时,该应用程序有一个夜间主题,其中颜色应该不同。我创建了一个 ColorThemeManager 类来存储两个主题的颜色。在主代码中绑定工作正常

<Window Background="{Binding ColorThemeManager.MainBackGroundColor}">

但对于 DataGrid,绑定不起作用:

                    <DataGrid ItemsSource="{Binding CurrentTestDevice.TestsSpecifications}">
                          <DataGrid.Resources>
                              <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="{Binding ColorThemeManager.SelectedRowColor"/>
                              <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="{Binding DataContext.ColorThemeManager.SelectedRowColor, RelativeSource={RelativeSource AncestorType=Window}}"/>
                              <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="{Binding DataContext.ColorThemeManager.SelectedRowForegroundColor, RelativeSource={RelativeSource AncestorType=Window}}"/>
                              <SolidColorBrush x:Key="{x:Static SystemColors.GrayTextBrushKey}" Color="Red"/>
                          </DataGrid.Resources>
                                  ...
                    </DataGrid>

我尝试了不同的方式。只有显式指定颜色的选项(如最后一个选项)才有效。这种情况下如何正确进行Binding呢?或者是否有另一种方法来设置所选行及其文本的颜色?

c#
  • 1 个回答
  • 36 Views
Martin Hope
Павел Спасский
Asked: 2022-12-28 22:02:36 +0000 UTC

C# WPF如何拦截空格键和回车键?

  • 5

学习任务。编写键盘训练器。用户在屏幕上看到一个字符串,他必须按下键盘上的键。对于大多数键,一切都通过添加到 Window 来决定

KeyDown="Key_Down_Handler"

空间不能这样处理是有问题的。如果没有选择任何元素,那么它将起作用,但如果选择了它,它要么什么也不做,或者,如果选择了一个按钮,则单击它。我还需要一个函数,例如 DoSomething () 在按下空格键时起作用

试图通过 Window.InputBindings 来做

<Window.InputBindings>
    <KeyBinding ????="DoSomething" Key="Space"/>
</Window.InputBindings>

但我无法弄清楚如何将按钮按下绑定到所需的方法。另外,还需要空格键的标准功能不起作用,单击所选元素。Enter 键也是如此。如何才能做到当在应用程序中的任何地方按下这些键时,都会触发 DoSomething 函数并且单击所选元素不起作用?

c#
  • 1 个回答
  • 20 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5