2011软件设计大赛编程
若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。(用java实现)输入
输入文件的第一行有一个正偶数N(N≤200),表示待挑选的自然数的个数。第二行给出N个不超过30000的正整数,相邻的两个数之间用一个空格分开。
输出
对每个正整数,输出一个整数K,表示你求得的“最佳方案”组成“素数伴侣”的对数。
输入样例 输出样例
4
2 5 6 13 2
--------------------编程问答-------------------- 有够无聊的
毫无意义的问题 --------------------编程问答-------------------- 你咋就不给力 什么叫毫无意义 有本事做出来 --------------------编程问答-------------------- 我还是去做增删改查吧~~ --------------------编程问答-------------------- 做这个题,一没钱,二没实际用处,我做它作甚! --------------------编程问答-------------------- 不要让哥鄙视你行不
--------------------编程问答-------------------- 这种题,也就给没事的学生做一做了,一不为钱,二为好玩 --------------------编程问答--------------------
咋能别丢人行不?
2011“国信蓝点杯”全国软件专业人才设计与开发大赛听说过没 ?
继续鄙视你
----------------------------------------------------------------
--------------------编程问答-------------------- 还真没听说过
除了acm我还真没听说过其他什么乱七八糟的大赛 --------------------编程问答-------------------- 一边去
你out了
//------------------ --------------------编程问答-------------------- 如没有猜错,你肯定是学生! --------------------编程问答-------------------- 晕,这还用猜吗? 不用猜 你也不是学生 --------------------编程问答-------------------- 只有学生才这么无聊 --------------------编程问答-------------------- 不要用无聊这些低级词汇来形容学生这些热血青年 --------------------编程问答-------------------- 题够无聊的 ,那比赛我也参加过,题简单 ,但是选择题我一个都没做出来 --------------------编程问答-------------------- 此次好像没选择题呀,就是编程题和程序完善! --------------------编程问答-------------------- 呃……我用C语言做出来过~
地址如下:
http://blog.sina.com.cn/s/blog_702c2db50100rnjz.html
这是不久前在C语言版那边看到题的时候做的,本来想来搜一搜还有没其他解法~结果不小心看到这个了
PS:鄙视那些说无聊的人,这题的核心算法非常有用,一看就是那些没有学好图论的孩子 --------------------编程问答-------------------- 恩 赞
-------------------------------------
用java实现的不 知道有没错误
package matchfour;
import java.io.IOException;
import java.util.*;
public class Four {
int count=0;
Vector<int[]> team=null;
public Four()
{
team=new Vector<int[]>();
String s=enterstring("count");
String data=enterstring("value");
Vector<Integer> v=aplitdata(data);
Vector<int []> iv=getin(v);
int n=checkteam(iv);
System.out.println("有"+n+"组");
count=Integer.parseInt(s);
}
public String enterstring(String warn)
{
System.out.println("please enter "+warn +" : ");
byte []str=new byte[100];
int n=0;
try {
n=System.in.read(str);
} catch (IOException e) {
System.out.println("one occured excepton:"+e.getMessage());
e.printStackTrace();
}
return new String(str).substring(0, n-2);
}
/*
* split the data
*
*/
public Vector<Integer> aplitdata(String str)
{
Vector<Integer> data=new Vector<Integer>();
StringTokenizer s=new StringTokenizer(str," ");
int n=s.countTokens();
for(int i=0;i<n;i++)
{
String temp=s.nextToken();
int value=Integer.parseInt(temp);
data.addElement(value);
}
return data;
}
/*
* get the the data
*/
public Vector<int []> getin(Vector<Integer> v)
{
int m=0;
for(int i=v.size()-1;i>=0;i--)
{
for(int j=i-1;j>=0;j--)
{
int re=v.get(i)+v.get(j);
int data[]=new int[2];
if(re%2!=0)
{
m++;
data[0]=v.get(i);
data[1]=v.get(j);
team.addElement(data);
}
}
}
return team;
}
/*
* end to check the vlaue team
*/
public int checkteam(Vector<int[]> team)
{
int theend=0;
for(int i=team.size()-1;i>=0;i--)
{
for(int j=i-1;j>=0;j--)
{
int dataa1=team.get(i)[0];
int dataa2=team.get(i)[1];
int datab1=team.get(j)[0];
int datab2=team.get(j)[1];
if(dataa1!=dataa2&&dataa1!=datab1&&dataa1!=datab2&&dataa2!=datab1&&dataa2!=datab2&&datab1!=datab2)
{
theend++;
}
}
}
return theend;
}
public static void main(String []args)
{
new Four();
}
}
--------------------编程问答--------------------
额,个人觉得这个比赛真的挺坑爹。。。。获奖率100%。。。。算法还是ACM比较靠谱
补充:Java , Java相关