解决方案 »
- 能否将"属性"作为函数的参数传递
- 请教关于DataGrid的一个问题,在线等...
- 学了C#,还有必要学VC吗?
- 水晶报表中列自动调整宽度的问题,头疼啊~~~~
- C#中如何操作缓冲区?
- Assembly.Load问题,都三天了都没搞定,急死我了,大家帮帮忙啊
- C#窗口加载时使textBox1内显示数值
- GetWindowPlacement怎么使用的?具体进来看代码
- 在WinFrom中,如何用c#把word文档中表格数据取出来
- c #做邮件提醒器
- 求 Oracle.DataAccess.DLL, v11.2.0.1, 64bit
- winform中两张pictureBox重叠,如何觉得谁在上谁在下?
程序干什么你可以看编程挑战栏,我用vs测过暂时没发现问题,我发帖的目的是把我做的编程挑战题拿出来供大家参看,属于技术炫耀,所谓的“欢迎指正漏洞”是类似于出书作者前言的“疏漏难免,请批评指正。” 纯属自我谦虚罢了,难道我还直接说,“编程挑战题3+1我不用1小时搞定,代码公开供大家学习欣赏”吗?积极参与要鼓励,技术炫耀也值得鼓励,不过建议你,
1、要点出那些值得学习的地方,而不是让读者花费时间去猜测。
2、不要假设每个人都有读心术,最好介绍你的题目是什么,从那里来。另外:
1、你的输入输出有问题(最后一个ReadLine)。
2、你的程序不能基本正确(比如输入2, 5 1)。
2、你的程序效率有很大的改进空间。
程序干什么你可以看编程挑战栏,我用vs测过暂时没发现问题,我发帖的目的是把我做的编程挑战题拿出来供大家参看,属于技术炫耀,所谓的“欢迎指正漏洞”是类似于出书作者前言的“疏漏难免,请批评指正。” 纯属自我谦虚罢了,难道我还直接说,“编程挑战题3+1我不用1小时搞定,代码公开供大家学习欣赏”吗?积极参与要鼓励,技术炫耀也值得鼓励,不过建议你,
1、要点出那些值得学习的地方,而不是让读者花费时间去猜测。
2、不要假设每个人都有读心术,最好介绍你的题目是什么,从那里来。另外:
1、你的输入输出有问题(最后一个ReadLine)。
2、你的程序不能基本正确(比如输入2, 5 1)。
2、你的程序效率有很大的改进空间。哦 以后注意了。
-3+1发布公司:
有 效 期:
赛 区:
CSDN
2014-04-09至2015-04-09
北京
难 度 等 级:
答 题 时 长:
编程语言要求:120分钟
C C++ Java C#
题目详情
有一个数列,所有的数都是非负整数,你可以进行如下方式进行一次操作(注意一次完整的操作必须先后完成如下两个步骤): (1) 任选一个不小于3的数,把它减少3。 (2) 任选一个数把它增加1。 请问,最多能够操作多少次? 输入格式: 多组数据,每组数据第一行是一个正整数n,表示数列中数的个数。(1<=n<=20000) 第二行包含n个空格分隔的非负整数,每个整数不超过1000000。 输出格式: 对每组数据输出一行,表示最多可以进行的操作次数。 答题说明输入样例 1 10 2 10 11 输出样例: 4 10
我的实现代码
namespace ConsoleApplication1
{
using System;
using System.Collections.Generic;
using System.Text; class Program
{
private static void fn(string[] s)
{
int n = 0;
if (s.Length == 1)
{
n = Convert.ToInt32(s[0]);
if (n >= 3)
{
if (n % 2 != 0)
{
cs += (n - 1) / 2;
}
else
{
cs += (n - 2) / 2;
}
} Console.WriteLine(cs);
}
else
{
for (int i = 0; i < s.Length; i++)
{
n = Convert.ToInt32(s[i]);
if (n >= 3)
{
break;
}
else
{
if (i == s.Length - 1)
{
Console.WriteLine(cs);
return;
}
}
} string[] s2 = new string[s.Length - 1];
int indx = -1;
for (int i = 0; i < s.Length; i++)
{
n = Convert.ToInt32(s[i]);
if (n < 3)
{
continue;
}
else
{
if (n % 2 != 0)
{
cs += (n - 1) / 2;
indx = i;
break;
}
else
{
if (i == s.Length - 1)
{
cs += (n - 2) / 2;
indx = i;
break;
}
}
}
} if (indx != -1)
{
int k = 0;
for (int i = 0; i < s.Length; i++)
{
if (indx != i)
{
s2[k] = s[i];
k++;
}
}
} for (int i = 0; i < s2.Length; i++)
{
n = Convert.ToInt32(s2[i]);
if (n>1&&n % 2 == 0)
{
s2[i] = (Convert.ToInt32(s2[i]) + 1).ToString();
fn(s2);
return;
}
else
{
if (i == s2.Length - 1)
{
goto l;
}
}
} l:
for (int i = 0; i < s2.Length; i++)
{
n = Convert.ToInt32(s2[i]);
if (n > 1)
{
s2[i] = (Convert.ToInt32(s2[i]) + 1).ToString();
fn(s2);
return;
}
else
{
if (i == s2.Length - 1)
{
s2[0] = (Convert.ToInt32(s2[0]) + 1).ToString();
fn(s2);
}
} }
}
} static int cs = 0;
static void Main(string[] args)
{
cs = 0;
string s1 = Console.ReadLine();
string[] s2 = Console.ReadLine().Split(" ".ToCharArray());
fn(s2); // Console.ReadLine();
}
}
}