第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
8 3 6 4 9
c++
#include<iostream>
#include<algorithm>
bool com(int a,int b)
{
return a<b;
}
using namespace std;
int main()
{
int n,a[201];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n,com);
for(int i=0;i<n-1;i++)
{
cout<<a[i]<<" ";
}
cout<<a[n-1]<<endl;
return 0;
}
java
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int []a=new int[201];
for(int i=0;i<n;i++)
{
a[i]=input.nextInt();
}
Arrays.sort(a,0,n);//java快排 Arrays.sort(数组名称,起始坐标,终止坐标+1);
for(int i=0;i<n-1;i++)
{
System.out.print(a[i]+" ");
}
System.out.println(a[n-1]);
}
}
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
c++
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n,d,h;//h标记
cin>>n;
while(n--)
{
string str,s;
cin>>str;
int h=0;
for(int i=0;i<str.length();i++)
{
if(str[i]=='0')
s+="0000";
else if(str[i]=='1')
s+="0001";
else if(str[i]=='2')
s+="0010";
else if(str[i]=='3')
s+="0011";
else if(str[i]=='4')
s+="0100";
else if(str[i]=='5')
s+="0101";
else if(str[i]=='6')
s+="0110";
else if(str[i]=='7')
s+="0111";
else if(str[i]=='8')
s+="1000";
else if(str[i]=='9')
s+="1001";
else if(str[i]=='A')
s+="1010";
else if(str[i]=='B')
s+="1011";
else if(str[i]=='C')
s+="1100";
else if(str[i]=='D')
s+="1101";
else if(str[i]=='E')
s+="1110";
else if(str[i]=='F')
s+="1111";
}//得到二进制数
//方便得到的二进制数分为每组三个数字,进而转化为八进制,三位并一位
if(s.length()%3==1)//余数为1加2颗0 "00"
{
s="00"+s;//"+"是连接符号,不能写成s+"00",有顺序
}
else if(s.length()%3==2)
{
s="0"+s;
}
for(int i=0;i<s.length();i+=3)
{
d=0;//三位并一位,一位每次循环清零
d=4*(s[i]-'0')+2*(s[i+1]-'0')+(s[i+2]-'0');
if(d)//控制不输出前导
{
h=1;//如果不为0,标记h=1,输出
}
if(h)
cout<<d;
}
cout<<endl;
}
return 0;
}
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
string a;
long long b=0;
int len;
cin>>a;
len=a.length();
for(int i=0;i<len;i++)
{
if(a[i]>='A')
{
b+=(a[i]-'A'+10)*pow(16,len-1-i);
}
else{
b+=(a[i]-'0')*pow(16,len-1-i);
}
}
cout<<b<<endl;
return 0;
}
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
//final int MAX=1000;
Scanner input=new Scanner (System.in);
String c=input.next();
long b=0;
int len=c.length();
char a[]=c.toCharArray();//字符串转字符数组
for(int i=0;i<len;i++)
{
if(a[i]>='A')
{
b+=(long)((a[i]-'A'+10)*Math.pow(16,len-1-i));
}
else{
b+=(long)((a[i]-'0')*Math.pow(16,len-1-i));
}
}
System.out.println(b);
}
}
给出一个非负整数,将它表示成十六进制的形式。
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
string a;
long long b=0;
int len;
cin>>a;
len=a.length();
for(int i=0;i<len;i++)
{
if(a[i]>='A')
{
b+=(a[i]-'A'+10)*pow(16,len-1-i);
}
else{
b+=(a[i]-'0')*pow(16,len-1-i);
}
}
cout<<b<<endl;
return 0;
}
java
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
//final int MAX=1000;
Scanner input=new Scanner (System.in);
String c=input.next();
long b=0;
int len=c.length();
char a[]=c.toCharArray();//字符串转字符数组
for(int i=0;i<len;i++)
{
if(a[i]>='A')
{
b+=(long)((a[i]-'A'+10)*Math.pow(16,len-1-i));
}
else{
b+=(long)((a[i]-'0')*Math.pow(16,len-1-i));
}
}
System.out.println(b);
}
}
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
989989
998899
#include<iostream>
using namespace std;
int main()
{
int n,b1,b2,b3,b4,b5,b6;
cin>>n;
int a=10000;
while(a<=99999)
{
b1=a%10;
b2=a/10%10;
b3=a/100%10;
b4=a/1000%10;
b5=a/10000%10;
if(b1==b5&&b2==b4&&b1+b2+b3+b4+b5==n)
cout<<a<<endl;
a++;
}
while(a<=999999)
{
b1=a%10;
b2=a/10%10;
b3=a/100%10;
b4=a/1000%10;
b5=a/10000%10;
b6=a/100000%10;
if(b1==b6&&b2==b5&&b3==b4&&b1+b2+b3+b4+b5+b6==n)
cout<<a<<endl;
a++;
}
return 0;
}
java
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner (System.in);
int n=input.nextInt();
int b1,b2,b3,b4,b5,b6;
int a=10000;
while(a<=99999)
{
b1=a%10;
b2=a/10%10;
b3=a/100%10;
b4=a/1000%10;
b5=a/10000%10;
if(b1==b5&&b2==b4&&b1+b2+b3+b4+b5==n)
System.out.println(a);
a++;
}
while(a<=999999)
{
b1=a%10;
b2=a/10%10;
b3=a/100%10;
b4=a/1000%10;
b5=a/10000%10;
b6=a/100000%10;
if(b1==b6&&b2==b5&&b3==b4&&b1+b2+b3+b4+b5+b6==n)
System.out.println(a);
a++;
}
}
}
#include<iostream>
using namespace std;
int main()
{
int b1,b2,b3,b4,b5;
int a=1000;
while(a<=9999)
{
b1=a%10;
b2=a/10%10;
b3=a/100%10;
b4=a/1000%10;
if(b1==b4&&b2==b3)
cout<<a<<endl;
a++;
}
return 0;
}
java
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
//final int MAX=36;
//Scanner input=new Scanner (System.in);
//int n=input.nextInt();
//int a[][]=new int[MAX][MAX];
int b1,b2,b3,b4,b5;
int a=1000;
while(a<=9999)
{
b1=a%10;
b2=a/10%10;
b3=a/100%10;
b4=a/1000%10;
if(b1==b4&&b2==b3)
System.out.println(a);
a++;
}
}
}
#include<iostream>
using namespace std;
int main()
{
int b1,b2,b3;
int a=100;
while(a<=999)
{
b1=a%10;
b2=a/10%10;
b3=a/100%10;
if(b1*b1*b1+b2*b2*b2+b3*b3*b3==a)
cout<<a<<endl;
a++;
}
return 0;
}
java
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
int b1,b2,b3;
int a=100;
while(a<=999)
{
b1=a%10;
b2=a/10%10;
b3=a/100%10;
if(b1*b1*b1+b2*b2*b2+b3*b3*b3==a)
System.out.println(a);
a++;
}
}
}
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
输入包含一个数n。
1 1
1 2 1
1 3 3 1
c++
#include<iostream>
#define MAX 36
using namespace std;
int main()
{
int n;
cin>>n;
int a[MAX][MAX];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(j==1||j==i)
{
a[i][j]=1;
}
else{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
java
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
final int MAX=36;
Scanner input=new Scanner (System.in);
int n=input.nextInt();
int a[][]=new int[MAX][MAX];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(j==1||j==i)
{
a[i][j]=1;
}
else{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
1 9 4 8 3 9
9
#include<iostream>
#define MAX 1001
using namespace std;
int main()
{
int n,a[MAX],b,h=1;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
cin>>b;
for(int i=1;i<=n;i++)
{
if(a[i]==b){
cout<<i<<endl;
h=0;
break;
}
}
if(h)cout<<"-1"<<endl;
return 0;
}
java
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
final int MAX=1001;
Scanner input=new Scanner (System.in);
int n=input.nextInt();
int h=1;
int a[]=new int[MAX];
for(int i=1;i<=n;i++)
{
a[i]=input.nextInt();
}
int b=input.nextInt();
for(int i=1;i<=n;i++)
{
if(a[i]==b){
System.out.println(i);
h=0;
break;
}
}
if(h==1)System.out.println("-1");
}
}
给出n个数,找出这n个数的最大值,最小值,和。
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
1 3 -2 4 5
-2
11
#include<iostream>
#define MAX 10001
using namespace std;
int main()
{
int n,a[MAX],max,min,t,sum;
cin>>n;
t=sum=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
max=min=a[1];
for(int i=1;i<=n;i++)
{
sum+=a[i];
if(a[i]<min)
{
t=a[i];
a[i]=min;
min=t;
}
if(a[i]>max)
{
t=a[i];
a[i]=max;
max=t;
}
}
cout<<max<<endl;
cout<<min<<endl;
cout<<sum<<endl;
return 0;
}
java
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
final int MAX=10001;
Scanner input=new Scanner (System.in);
int n=input.nextInt();
int max,min,sum,t;
int a[]=new int[MAX];
for(int i=1;i<=n;i++)
{
a[i]=input.nextInt();
}
max=min=a[1];
sum=0;
for(int i=1;i<=n;i++)
{
sum+=a[i];
if(a[i]<min)
{
t=a[i];
a[i]=min;
min=t;
}
if(a[i]>max)
{
t=a[i];
a[i]=max;
max=t;
}
}
System.out.println(max);
System.out.println(min);
System.out.println(sum);
}
}
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
BABCDEF
CBABCDE
DCBABCD
EDCBABC
#include<iostream>
#define MAX 27
using namespace std;
int main()
{
int n,m;
char a[MAX][MAX];
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(j>=i)
{
a[i][j]='A'+(j-i);
}
if(j<i)
{
a[i][j]='A'+(i-j);
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<a[i][j];
}
cout<<endl;
}
return 0;
}
java
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
final int MAX=27;
Scanner input=new Scanner (System.in);
int n=input.nextInt();
int m=input.nextInt();
char a[][]=new char[MAX][MAX];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(j>=i)
{
a[i][j]=(char )('A'+(j-i));
}
if(j<i)
{
a[i][j]=(char )('A'+(i-j));
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
System.out.print(a[i][j]);
}
System.out.println();
}
}
}
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
00001
00010
00011
<以下部分省略>
#include<iostream>
#define MAX 27
using namespace std;
int main()
{
for(int a=0; a<=1; a++)
{
for(int b=0; b<=1; b++)
{
for(int c=0; c<=1; c++)
{
for(int d=0; d<=1; d++)
{
for(int e=0; e<=1; e++)
{
cout<<a<<b<<c<<d<<e<<endl;
}
}
}
}
}
return 0;
}
java
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
int a,b,c,d,e;
for(a=0;a<2;a++){
for(b=0;b<2;b++){
for(c=0;c<2;c++){
for(d=0;d<2;d++){
for(e=0;e<2;e++){
System.out.print(a);
System.out.print(b);
System.out.print(c);
System.out.print(d);
System.out.print(e);
System.out.println();
}
}
}
}
}
}
}
给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:
1. 年份是4的倍数而不是100的倍数;
2. 年份是400的倍数。
其他的年份都不是闰年。
说明:当试题指定你输出一个字符串作为结果(比如本题的yes或者no,你需要严格按照试题中给定的大小写,写错大小写将不得分。
import java.util.*;
import java.math.*;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner (System.in);
int y=input.nextInt();
if(y%400==0||(y%4==0)&&(y%100!=0))
{
System.out.println("yes");
}
else System.out.println("no");
}
}