数字求和
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少?
- 输入
- 输入一行,只包括6个小于100的正整数,其中第一个正整数就是a。
- 输出
- 输出一行,给出一个正整数,是5个数中小于a的数的和。
- 样例输入
-
10 1 2 3 4 11
- 样例输出
-
10
public class acm1001 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int x1 = sc.nextInt();
int x2 = sc.nextInt();
int x3 = sc.nextInt();
int x4 = sc.nextInt();
int x5 = sc.nextInt();
int sum = 0 ;
if(a>x1){
sum += x1;
} if(a>x2){
sum+= x2;
} if(a>x3){
sum+= x3;
} if(a>x4){
sum+= x4;
} if(a>x5){
sum+= x5;
}
System.out.println(sum);
}
}
与7无关的数
描述
一个正整数,如果它能被7整除,或者它的十进制表示法中某个位数上的数字为7,则称其为与7相关的数.现求所有小于等于n(n<100)的与7无关的正整数的平方和.
输入
输入为一行,正整数n,(n<100)
输出
输出小于等于n的与7无关的正整数的平方和
样例输入
21
样例输出
2336
public class acm1002_1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum = 0,n ;
n = sc.nextInt();
for (int i = 1; i <= n; i++) {
if (i % 7 != 0 && i % 10 != 7 && i / 10 != 7) {
sum = sum + i*i;
}
}
System.out.println(sum);
}
}
和数
描述
给定一个整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。
输入
第一行是一个整数T,表示一共有多少组数据。 1<= T <= 100
接下来的每组数据共两行,第一行是数列中数的个数n ( 1 <= n <= 100),第二行是由n个整数组成的数列。
输出
对于每组数据,输出一个整数(占一行),就是数列中等于其他两个数之和的数的个数。
样例输入
2 4 1 2 3 4 5 3 5 7 9 10
样例输出
2 1
思路:可以先将这个数组中所有两个数相加的和存入另一个数组(两重循环即可),然后再扫描一遍这个数组同相加的和的数组比较,如果相同则答案++
public class acm1003 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] n =new int[sc.nextInt()];
int n1[][] = new int[n.length][100];
for(int i = 0;i<n.length;i++){
n[i] = sc.nextInt();
for(int j = 0; j<n[i];j++){
n1[i][j] = sc.nextInt();
}
}
for(int i = 0 ;i<n.length;i++){
int c = 0 ;
for(int j = 0;j<n[i];j++){
int b = 0;
for(int x = 0 ;x<n[i];x++){
for(int y = 0;y<n[i];y++){
if(n1[i][j] == n1[i][x] + n1[i][y] && j!=x&&j!=y&&x!=y){
c++;
b=1;
break;
}
}
if(b==1){
break;
}
}
}
System.out.println(c);
}
}
}
反转诗句
描述
你手中有些从右向左读的诗句,比如“rose red red a like is luve my O”。
现在为了阅读这些美妙的诗句,你要把这些语句反转成正常的从左到右,即“O my luve is like a red red rose”。
输入
每一行为原来从右向左读的诗句S。该诗句中不包含任何标点符号,单词间以空格隔开。每条诗句最多包含 50个单词,每个单词最多包含50个字符。
输出
每一行为正常的从左到右读的诗句。
样例输入
rose red red a like is luve my O June in sprung newly That's melodie the like is luve my O tune in played sweetly That's
样例输出
O my luve is like a red red rose That's newly sprung in June O my luve is like the melodie That's sweetly played in tune
以下代码没提交通过。说实话我也纳闷,网上那些C语言人为判断都不符合要求,50个字符都超了还能ac
public class acm1004 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
loop: while (sc.hasNext()) {
String str = sc.nextLine();
String[] arr = str.split(" ");
if (arr.length <= 50) {
for (int i = 0; i < arr.length; i++) {
if (arr[i].length() > 50) {
continue loop;
}
}
String temp = "";
for (int i = 0; i <= arr.length / 2; i++) {
temp = arr[i];
arr[i] = arr[arr.length - (1 + i)];
arr[arr.length - (1 + i)] = temp;
}
for (int i = 0; i < arr.length; i++) {
if (i != arr.length - 1) {
System.out.print(arr[i] + " ");
} else {
System.out.print(arr[i]);
}
}
System.out.println();
}
}
}
}
1的个数
描述
给定一个十进制整数N,求其对应2进制数中1的个数
输入
第一个整数表示有N组测试数据,其后N行是对应的测试数据,每行为一个整数。
输出
N行,每行输出对应一个输入。
样例输入
4 2 100 1000 66
样例输出
1 3 6 2
public class acm1005 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i = 0 ;i<n;i++){
int a = sc.nextInt();
String s = Integer.toBinaryString(a);
String[] arr = s.split("");
int num = 0 ;
for(int j = 0 ;j<arr.length;j++){
if(arr[j].equals("1")){
num++;
}
}
System.out.println(num);
}
}
}
放苹果
描述
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
输入
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
输出
对输入的每组数据M和N,用一行输出相应的K。
样例输入
1 7 3
样例输出
8
public class acm1006 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
if(t>=0&&t<=20){
for(int i=0;i<t;i++){
System.out.println(fun(sc.nextInt(),sc.nextInt()));
}
}
}
private static int fun(int m, int n) {
if(m==0||n==1){
return 1;
}
if(n>m){
return fun(m,m);
}else{
return fun(m,n-1)+fun(m-n,n);
}
}
}
递归求和
描述
递归是一种非常有效的程序设计方法,应用相当广泛,递归求和就是其中的一种。现在定义数列通项An = n * n,给定一个整数n(1 <= n <= 1000),要你求前n项和Sn,即Sn = 1 * 1 + 2 * 2 + ... + n * n。要求使用递归的方法进行计算。
输入
输入只有一行,包括一个整数n,表示要求的项数。
输出
输出只有一行,为一个整数Sn,表示对应的前n项和。
样例输入
7
样例输出
140
public class acm1019 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
acm1019 t = new acm1019();
System.out.println(t.count(sc.nextInt()));
}
private int count(int n) {
if(n==1){
return 1*1;
}else{
return n*n + count(n-1);
}
}
}
前段时间练的50道经典题就不发了,就直接发在poj上练习的代码。
此部分代码还算简单,就是苹果问题稍微难考虑。
未来一月可能就只发布练习的代码,及学习的代码还有可能是题目分析。把装到脑子的东西再复述出来也是一种学习方式。
o了,碎觉。