1.输入联系【Java】
【问题描述】
任务很简单:
给定若干个整数,请编程输出它们的和。
【输入形式】
输入包含多组测试用例。
每组测试数据首先是一个正整数N,表示本组数据有N个整数。
请处理到文件结束。
【输出形式】
请计算每组数据的和,每组输出占一行。
【样例输入】
4 1 3 4 9 5 10 2 30 4 50
【样例输出】
17 96
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true){
if(sc.hasNext()){
String s = sc.nextLine();
String[] str = s.split(" ");
int sum = 0;
int n = Integer.parseInt(str[0]);
for (int x = 1; x < n+1; x++) {
sum += Integer.parseInt(str[x]);
}
System.out.println(sum);
}else break;
}
}
}
2.丑数 【Java】
【问题描述】
丑数的定义是这样的——
一个数,如果它分解后的素因子最多只有2、3、5、7四种,这个数则称为“丑数”。比如,前20个丑数是:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27。
现在你的任务是:给你一个数,你能判断是否是丑数吗?
【输入形式】
输入数据的第一行首先是一个整数C,表示测试数据的个数,然后是C组数据,每组测试数据包含一个整数n(1 <= n <= 2^31-1)。
【输出形式】
对于每组测试数据,如果n是丑数,则请输出“ Yes”,否则,请输出“No”.
【样例输入】
3 12 385875 11
【样例输出】
Yes Yes No
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
int num = sc.nextInt();
if (check(num)==1) System.out.println("Yes");
else System.out.println("No");
}
}
public static int check(int num){
while(num%2==0){
num/=2;
}
while(num%3==0){
num/=3;
}
while(num%5==0){
num/=5;
}
while(num%7==0){
num/=7;
}
if(num==1)
return 1;
return 0;
}
}
3.字符三角形【Java】
【问题描述】
我们学习了编程,通过对程序的控制,可以做一些有趣的输出。
比如,这个题目就是给定一个正整数N,请你输出一个由N行的*组成的三角形。
但是——为了图形的美观,我们希望输出的是一个等腰三角形!
具体规则如下:
第一行是1个*
第二行是3个*
第三行是5个*
……
依次类推,一直到第N行(第N行的开始没有空格)。
更多了解可以参见样例。
【输入形式】
输入数据第一行是一个正整数C,表示一共有C组测试用例。
接下来C行,每组数据占一行,是一个正整数N(1<=N<=40),N的含义见题目描述。
【输出形式】
对于每组数据给定的N,请按照要求输出由*组成的N行等腰三角形。
【样例输入】
2 3 5
【样例输出】
*
***
*****
*
***
*****
*******
*********
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int k = 0; k < n; k++) {
int num = sc.nextInt();
for (int i = 1; i <=num; i++) { //输出4行
for (int j = 0; j < num-i; j++) {
System.out.print(" ");
}
for (int j = 1; j <= 2*i-1; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
}
4.奋勇争先【Java】
【问题描述】
在丁爸信奥培训班中,每一次的作业,大家都奋勇争先,想拿下第一名。
现在已知某次测验的每位同学的解题数量和罚时,希望你能够告诉老师谁是第一名。
注:
首先依据解题数量从大到小排名,若解题数量相同,则比较罚时,罚时少的排名靠前。
【输入形式】
第一行是数据组数C,代表有C组测试实例。
每一组数据第一行为一个N,代表下面有N个人的成绩。
接下来N行,每一行依次给出名字Name,解题数量num和罚时time
( 1<=C<=10, 2<N<=1000, Name的长度最大为10, 1<=num<=10,
10<=time<=100000 )
【输出形式】
每组测试数据输出一行,依次为第一名的名字、解题数量和罚时,中间用空格隔开。
【样例输入】
1 3 Bob 5 50 Alice 4 46 John 5 48
【样例输出】
John 5 48
import java.util.Arrays;
import java.util.Scanner;
class student{
private String name;
private int num;
private int time;
public student(String name,int num,int time){
this.name = name;
this.num = num;
this.time = time;
}
public String getName(){
return this.name;
}
public int getTime() {
return this.time;
}
public int getNum() {
return this.num;
}
public String tell(){
return this.name+" "+this.num+" "+this.time;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 几组数据
int n = sc.nextInt();
for (int k = 0; k < n; k++) {
// 输入几行数字
int m = sc.nextInt();
// 申请几个数组
student[] st_arr = new student[m];
for (int i = 0; i < m; i++) {
String data1 = sc.next();
int data2 = sc.nextInt();
int data3 = sc.nextInt();
student st_data = new student(data1,data2,data3);
st_arr[i] = st_data;
}
int index=0;
String name = st_arr[0].getName();
int max_num = st_arr[0].getNum();
int time = st_arr[0].getTime();
for (int i = 0; i < m; i++) {
if (max_num<st_arr[i].getNum()){
name = st_arr[0].getName();
max_num = st_arr[i].getNum();
time = st_arr[i].getTime();
index =i;
}
if (max_num==st_arr[i].getNum()){
if(time>st_arr[i].getTime()){
name = st_arr[0].getName();
max_num = st_arr[i].getNum();
time = st_arr[i].getTime();
index = i;
}
}
}
System.out.println(st_arr[index].tell());
}
}
}
5.超级密码【Java】
【问题描述】
上次设计的“高级密码”被你们破解了,一丁小朋友很不服气!
现在,他又设计了一套更加复杂的密码,称之为“超级密码”。
说实话,这套所谓的“超级密码”其实也并不难:
对于一个给定的字符串,你只要提取其中的数字,然后连在一起构成一个整数,再乘以刘一丁小朋友的幸运数字513,就是解密后的结果了~
比如,字符串“ads2d4,122”,提取后的整数是24122,然后乘以513,就能得到解密后的结果:12374586。
注:题目保证解密后的结果在32位无符号整数范围。
【输入形式】
输入首先包括一个正整数N,表示有N组测试用例。
每组数据占一行,包含一个长度不超过30的字符串。
【输出形式】
请根据题目要求输出解密后的结果,每组数据输出一行。
【样例输入】
2 ads2d4,122 0023asdf2AA90
【样例输出】
12374586 11947770
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 0; i <n; i++) {
StringBuilder buf=new StringBuilder();
String pword = sc.next();
int sum=0;
for (int j = 0; j < pword.length(); j++) {
if(pword.charAt(j)>='0' && pword.charAt(j)<='9'){
buf.append(pword.charAt(j));
}
}
//将StringBuilder转换成String
String number = buf.reverse().toString();
for (int j = 0; j < number.length(); j++) {
sum +=Integer.valueOf(number.charAt(j)-48)*Math.pow(10,j);
}
System.out.println(sum*513);
}
}
}
6.求根号n【C】
【输入形式】输入一个正整数
【输出形式】输出答案
【样例输入】10
【样例输出】3
【样例说明】表示对n开平方后向下取整。
#include <stdio.h>
int szys_sqrt(int n)
{
int i=1;
l: if(i*i==n)
return i;
if(i*i>n)
return i-1;
i=i+1;
goto l;
}
int main()
{
int n;
scanf("%d", &n);
printf("%d\n",szys_sqrt(n));
return 0;
}
7.学生成绩排序【C】
【问题描述】
对某班学生成绩排序。从键盘依次输入某班学生的姓名和成绩(一个班级人数最多不超过50人)并保存,然后分别按学生成绩由高到低顺序输出学生姓名和成绩,成绩相同时,则按输入次序排序。
【输入形式】
从键盘依次输入最多不超过50个学生的学生姓名和成绩:
第一行输入班级学生人数;
在单独行上输入空格隔开的学生姓名和成绩,其中学生成绩是整数。
【输出形式】
按学生成绩由高到低顺序输出学生姓名和成绩,每行输出一位学生的姓名和成绩,其中姓名(英文)占15位,成绩占5位,均按缺省方式对齐。成绩相同时按输入次序排序。
【输入样例】
4
aaa 50
bbb 70
ccc 65
ddd 90
【输出样例】
############ddd###90
############bbb###70
############ccc###65
############aaa###50
(注意:其中“#”号代表空格)
【样例说明】
输入了四个学生姓名和成绩,按成绩排序输出。
#include <stdio.h>
struct student
{
char name[50];
int score;
};
int main()
{
struct student a[50];
struct student t;
int i,n,j;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s%d",&a[i].name,&a[i].score);
for(i=1;i<n;i++)
for(j=0;j<n-i;j++)
if(a[j].score<a[j+1].score)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
for(i=0;i<n;i++)
printf("%15s%5d\n",a[i].name,a[i].score);
return 0;
}
8.学生成绩排序(冒泡)【C】
【问题描述】对一含有n个整数的数组,使用选择排序将其由小到大排序。
【输入形式】第一行为元素个数n,第二行为n个整数(以空格隔开)。
【输出形式】输出n个整数(以空格隔开)
【样例输入】
6
43 2 56 1 22 9
【样例输出】
1 2 9 22 43 56
#include <stdio.h>
void sort(int a[], int n)
{
int i, t, j;
for(i=0; i<n-1; i++)
{
for(j=i+1; j<n; j++)
{
if(a[j]<a[i])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
}
int main()
{
int n;
scanf("%d",&n);
int i;
int score[n];
for(i=0;i<n;i++)
scanf("%d",&score[i]);
sort(score,n);
for(i=0;i<n;i++)
printf("%d ",score[i]);
return 0;
}
9.十进制到八进制的转换【C++】
【问题描述】对于输入的任意一个非负十进制整数n(0=<n<100000),打印输出与其等值的八进制数
【输入形式】非负十进制整数
【输出形式】相应十进制整数转换后的八进制正整数,若输入不符合要求,提示错误,重新输入
【样例输入】5548
【样例输出】12654
【样例说明】先判断输入是否符合非负正整数要求
//十进制到八进制的转换
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int i,t=0;
cin>>i;
vector<int>nums;
if(i>0)
{
for(;i>0;i/=8)//每次都除8
{
t=i%8;
nums.push_back(t);//压入余数
}
}
else
{
cout<<"0";
}
for(int time=nums.size()-1;time>=0;--time)
{
cout<<nums[time];//输出除以8的余数
}
}