第一题:
输入一组由正整数组成的数字序列,序列大小不超过500,遇到-1结束输入,判断这个数字序列是否是升序。如果是升序,输出“YES”,如果不是升序,输出“NO”。
#include<iostream>
using namespace std;
int main(){
int a[500];
int n, i = 0;
bool judge = true;
while(cin>>n && n!=-1 && i<500){
a[i] = n;
if(a[i] < a[i-1])
judge = false;
i++;
}
if(judge == false){
cout<<"NO"<<endl;
}else{
cout<<"YES"<<endl;
}
return 0;
}
第二题:
输入一个正整数n,判断不超过n的所有数中与7有关的数有多少个。如果某个数是7或者是7的倍数,或者这个数的某一位是7,那么这个数便与7有关。举个例子,如果输入的n是20,那么20以内与7有关的数便是:7、14、17,最终输出结果是3。
#include<iostream>
using namespace std;
int total(int n){
int count = 0;
for(int i=1; i<=n; i++){
if(i%7==0){
count++;
}else{
int t = i;
while(t){
if(t%10==7){
count++;
break;
}
t /= 10;
}
}
}
return count;
}
int main(){
int n;
cin>>n;
cout<<total(n)<<endl;
return 0;
}
第三题:
输入一个正整数,判断这个数是否是“回文数”。所谓“回文数”,便是正着念和反着念都一样的数。比如,1、11、121、1221、12321,都是回文数。如果这个输入的数是回文数,那么输出“YES”,如果不是回文数,输出“NO”。
#include<iostream>
using namespace std;
bool isHuiWen(int n){
int a[100], i = 0;
bool flag = true;
while(n){
a[i++] = n % 10;
n /= 10;
}
for(int j = 0; j < i; j++,i--){
if(a[j] != a[i-1]) {
flag = false;
break;
}
}
return flag;
}
int main(){
int n;
cin>>n;
if(isHuiWen(n)){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
return 0;
}
第四题:
输入两个字符串,str1 和 str2,将字符串 str2 逆序之后连接到字符串 str1 后面,最后输出str1。举个例子,如果输入的字符串 str1 是"abc", 字符串 str2是"123",那么逆序连接之后,输出的结果为"abc321"。
#include<iostream>
using namespace std;
void strcat(char * str1,char * str2){
int a = strlen(str1);
int b = strlen(str2);
for(int i = 0; i < b; i++){
str1[a++] = str2[b-i-1];
}
str1[a] = '\0';
}
int main(){
char str1[1000],str2[1000];
cin>>str1;
cin>>str2;
strcat(str1,str2);
cout<<str1<<endl;
return 0;
}
第五题:
首先输入两个正整数,m(2<=m<=36)和n(2<=n<=36),然后输入一个m进制的数字串,将这个数字串转换为n进制并输出。如果进制超过9,那么用小写字母’a’到’z’依次表示10~35的数字。(假设数字串对应的十进制数用int存储不溢出)
#include<iostream>
using namespace std;
int mToTen(char *s, int m){ //s:m进制的数字串,m:原进制
int num = 0, t = 0, d = 1;
int i = strlen(s) - 1;
for( ; i >= 0; i-- ){
if(s[i] - '0' >= m){
cout<<"请输入正确的"<<m<<"进制数"<<endl;
return 0;
} else if( s[i] >= 'a' && s[i] <= 'z' ){
t = s[i] - 'a' + 10;
} else {
t = s[i] - '0';
}
num += t * d;
d *= m;
}
return num;
}
void tenToN(int num, int n, char *s){ //num:十进制数,n:目标进制,s:用于存储转换后的字符串
char temp[100];
int i = 0;
while(num){
int a = num % n;
if( a > 9 ){
temp[i] = a - 10 + 'a';
} else {
temp[i] = a + '0';
}
i++;
num /= n;
}
for (int j = 0 ; j < i; j++){
s[i-j-1] = temp[j];
}
s[i] = '\0';
}
int main(){
int m,n;
char s[100];
cin>>m>>n;
cin>>s;
int b = mToTen(s,m);
tenToN(b,n,s);
cout<<s<<endl;
return 0;
}
第六题:
输入一个正整数n(n<=30),输出n所对应的蛇形矩阵。例如:
n=10时,蛇形矩阵为:
10 9 5 4
8 6 3
7 2
1
#include<iostream>
using namespace std;
void display(int n,int a[][10]){
if(n >= 1 && n <= 30){
int k = n;
for(int i = 0; i < n; i++){ //i控制第几条对角线,从0开始
if(i % 2){ //奇数对角线
for(int j = 0; j <= i; j++){
a[j][i-j] = k--;
}
}else{ //偶数对角线
for(int j = 0; j <= i; j++){
a[i-j][j] = k--;
}
}
}
}
for(int i = 0; i < 10; i++){
for(int j = 0; j < 10; j++){
if(a[i][j] >= 1){
cout<<a[i][j]<<" ";
}
}
cout<<endl;
}
}
int main(){
int n,a[10][10];
cin>>n;
display(n,a);
return 0;
}