
習(xí)題
1 奇偶個(gè)數(shù)(5分)
題目?jī)?nèi)容:
你的程序要讀入一系列正整數(shù)數(shù)據(jù),輸入-1表示輸入結(jié)束,-1本身不是輸入的數(shù)據(jù)。程序輸出讀到的數(shù)據(jù)中的奇數(shù)和偶數(shù)的個(gè)數(shù)。
輸入格式:
一系列正整數(shù),整數(shù)的范圍是(0,100000)。如果輸入-1則表示輸入結(jié)束。
輸出格式:
兩個(gè)整數(shù),第一個(gè)整數(shù)表示讀入數(shù)據(jù)中的奇數(shù)的個(gè)數(shù),第二個(gè)整數(shù)表示讀入數(shù)據(jù)中的偶數(shù)的個(gè)數(shù)。兩個(gè)整數(shù)之間以空格分隔。
輸入樣例:
9 3 4 2 5 7 -1
輸出樣例:
4 2
思路
讀入數(shù)據(jù),判斷奇偶,記錄。
代碼
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int odd = 0, even = 0, a = 0;
while(a != -1) {
a = in.nextInt();
if(a % 2 == 0) {
even++;
}
else if(a != -1){
odd++;
}
}
System.out.println(odd + " " + even);
}
}
2 數(shù)字特征值(5分)
題目?jī)?nèi)容:
對(duì)數(shù)字求特征值是常用的編碼算法,奇偶特征是一種簡(jiǎn)單的特征值。對(duì)于一個(gè)整數(shù),從個(gè)位開始對(duì)每一位數(shù)字編號(hào),個(gè)位是1號(hào),十位是2號(hào),以此類推。這個(gè)整數(shù)在第n位上的數(shù)字記作x,如果x和n的奇偶性相同,則記下一個(gè)1,否則記下一個(gè)0。按照整數(shù)的順序把對(duì)應(yīng)位的表示奇偶性的0和1都記錄下來(lái),就形成了一個(gè)二進(jìn)制數(shù)字。比如,對(duì)于342315,這個(gè)二進(jìn)制數(shù)字就是001101。
這里的計(jì)算可以用下面的表格來(lái)表示:
按照二進(jìn)制位值將1的位的位值加起來(lái)就得到了結(jié)果13。
你的程序要讀入一個(gè)非負(fù)整數(shù),整數(shù)的范圍是[0,100000],然后按照上述算法計(jì)算出表示奇偶性的那個(gè)二進(jìn)制數(shù)字,輸出它對(duì)應(yīng)的十進(jìn)制值。
提示:將整數(shù)從右向左分解,數(shù)位每次加1,而二進(jìn)制值每次乘2。
輸入格式:
一個(gè)非負(fù)整數(shù),整數(shù)的范圍是[0,1000000]。
輸出格式:
一個(gè)整數(shù),表示計(jì)算結(jié)果。
輸入樣例:
342315
輸出樣例:
13
思路
用某位上數(shù)字減去對(duì)應(yīng)位數(shù)、加1、然后對(duì)2求余,得到該為的記錄值,然后求得二進(jìn)制位值,累加。
代碼
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int a, m, n = 0, count = 1;
m =in.nextInt();
do {
a = Math.abs((m % 10 - count + 1) % 2);
n += a * (int)(Math.pow(2, count-1));
count++;
m /= 10;
}while(m != 0);
System.out.println(n);
}
}
---END---
