110,590
社区成员
发帖
与我相关
我的任务
分享
static void Main(string[] args)
{
int red = 3;
int write = 5;
int black = 6;
for (int i = 1; i <= write; i++)
{
for (int j = 0; j <= red; j++)
{
black = 8 - i - j;
if (black != 7)//黑球数只有6个
{
Console.WriteLine("write:{0}" + " red:{1}" + " black:{2}", i, j, black);
}
}
}
Console.ReadKey();
}
write:1 red:1 black:6
write:1 red:2 black:5
write:1 red:3 black:4
write:2 red:0 black:6
write:2 red:1 black:5
write:2 red:2 black:4
write:2 red:3 black:3
write:3 red:0 black:5
write:3 red:1 black:4
write:3 red:2 black:3
write:3 red:3 black:2
write:4 red:0 black:4
write:4 red:1 black:3
write:4 red:2 black:2
write:4 red:3 black:1
write:5 red:0 black:3
write:5 red:1 black:2
write:5 red:2 black:1
write:5 red:3 black:0
if (arry[i - 1] < arry[i])
{
int tmp = arry[i - 1];
arry[i - 1] = arry[i];
arry[i] = tmp;
return true;
}
此处应该把i后面比第i个元素大的最小值和第i元素互换,然后将i+1之后的元素按小至大排列,要是纠结结果的话可以自选修改。 //编一个程序,从三个红球,五个白球,六个黑球中任意取出八个球,且其中必须有白球,输出所有可能的方案。
static void Main()
{
int gIndex = 0, aIndex = 0;
ConsoleColor[] colors = new ConsoleColor[] { ConsoleColor.White, ConsoleColor.Red, ConsoleColor.DarkGray };
for (int white = 1; white <= 5; white++)
{
for (int red = 0; red <= 3; red++)
{
int black = 8 - white - red;
if (black < 0 || black > 6) continue; //白+红不足2个,抛弃
gIndex++;
//分别用0、1、2表示白球、红球、黑球
int[] arry = new int[8];
for (int i = 0; i < white; i++)
arry[i] = 0;
for (int i = 0; i < red; i++)
arry[i + white] = 1;
for (int i = 0; i < black; i++)
arry[7 - i] = 2;
do
{
aIndex++;
Console.Write("{0:00}:{1:000}:", gIndex, aIndex);
for (int i = 0; i < arry.Length; i++)
{
Console.ForegroundColor = colors[arry[i]];
Console.Write("●");
}
Console.WriteLine();
Console.ResetColor();
} while (Range(arry));
}
}
Console.ReadKey();
}
private static bool Range(int[] arry)
{
for (int i = arry.Length - 1; i > 0; i--)
{
if (arry[i - 1] < arry[i])
{
int tmp = arry[i - 1];
arry[i - 1] = arry[i];
arry[i] = tmp;
return true;
}
}
return false;
}
int nCount = 8;//总共拿出个数
int nRedCount = 100;
int nWriteCount = 100;
int nBlackCount = 1;
for (int write = 1; write <= nWriteCount && write <= nCount; write++) {
for (int red = 0; red <= nRedCount && (write + red) <= nCount; red++) {
//黑球不够凑够8个的情况下的情况下
if (nCount - write - red > nBlackCount) continue;
Console.WriteLine(
"write:" + write +
" red:" + red +
" black:" + (nCount - write - red));
}
}
write:1 red:6 black:1
write:1 red:7 black:0
write:2 red:5 black:1
write:2 red:6 black:0
write:3 red:4 black:1
write:3 red:5 black:0
write:4 red:3 black:1
write:4 red:4 black:0
write:5 red:2 black:1
write:5 red:3 black:0
write:6 red:1 black:1
write:6 red:2 black:0
write:7 red:0 black:1
write:7 red:1 black:0
write:8 red:0 black:0
//白球可以是 1 - 5 个
for(int write = 1;write <= 5;write++){
//红球可以是 0 - 3 个
for(int red = 0;red <= 3;red++){
//剩下的就是黑球
Console.WriteLine(
"write:" + write +
" red:" + red +
" black:" + (8 - write - red));
}
}
write:1 red:0 black:7
write:1 red:1 black:6
write:1 red:2 black:5
write:1 red:3 black:4
write:2 red:0 black:6
write:2 red:1 black:5
write:2 red:2 black:4
write:2 red:3 black:3
write:3 red:0 black:5
write:3 red:1 black:4
write:3 red:2 black:3
write:3 red:3 black:2
write:4 red:0 black:4
write:4 red:1 black:3
write:4 red:2 black:2
write:4 red:3 black:1
write:5 red:0 black:3
write:5 red:1 black:2
write:5 red:2 black:1
write:5 red:3 black:0