这个是本萌新准备找工作时自己在网上刷的题目和自己写的答案,类似的答案在网上很多,我也的答案也算不上好,仅仅是留下来做个备份(所有答案由C++或Python编写)编写环境为Win7 64bit, VS2017。
话不多说,下面是题目。
2、打印沙漏
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
我的解法:
#include#include
using namespace std;
int main()
{
int a, left;//a为输入*的个数,left为最后剩余*的个数,n为上半部分的行数int n;
char sign;//sign为用户输入的符号
//cout << "输入数字和符号" << endl;cin >> a;
cin >> sign;
n = (int)sqrt((a + 1) / 2);
left = (int)a - (2 * n*n - 1);
//cout <
for (int i= n; i > 1; i--)
{
for (int j = 2*i-1; j > 0; j--)
{
cout << sign;
}
cout << "\n";
for (int k = n-i+1;k>0 ;k-- )
{
cout << " ";
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 2 * i - 1; j > 0; j--)
{
cout <
}
cout << "\n";
for (int k = n - i + 1; k>2; k--)
{
cout << " ";
}
}
cout <
return 0;
}
3、个位数统计
给定一个k位整数
,请编写程序统计每种不同的个位数字出现的次数。例如:给定N = 100311,则有2个0,3个1,和1个3。
输入格式:
每个输入包含1个测试用例,即一个不超过1000位的正整数N。
输出格式:
对N中每一种不同的个位数字,以X:M的格式在一行中输出该位数字X及其在N中出现的次数M。要求按X的升序输出。
输入样例:100311
输出样例:
0:2
1:3
3:1
#include
#include
using namespace std;
int main()
{
string s;
int n[10] = { 0 };
cin >> s;
for (int i = 0; i < s.length(); i++)
{
switch (s[i])
{
default:cout << "输入有误" << endl; break;
case '0':n[0]++; break;
case '1':n[1]++; break;
case '2':n[2]++; break;
case '3':n[3]++; break;
case '4':n[4]++; break;
case '5':n[5]++; break;
case '6':n[6]++; break;
case '7':n[7]++; break;
case '8':n[8]++; break;
case '9':n[9]++; break;
}
}
for (int j = 0; j < 10; j++)
{
if (n[j] != 0)
{
cout << j << ":" << n[j] << endl;
}
}
return 0;
}
7、念数字
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出“fu”字。十个数字对应的拼音如下:
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
输入格式:
输入在一行中给出一个整数,如: 1234 。
提示:整数包括负数、零和正数。
输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si。
输入样例:-600
输出样例:fu liu ling ling
我的解法:
#include#include
using namespace std;
int main()
{
string s;//s为输入的字符串cin >> s;//有朋友问我这个地方有没有报错,别的编译器我不太了解,至少在VS2017 //没有报错,然后也通过了PAT的检测if (s[0]=='-')
{
cout << "fu ";
for (int i = 1; i < s.length()-1; i++)
{
switch (s[i])
{
case '0':cout << "ling "; break;
case '1':cout << "yi "; break;
case '2':cout << "er "; break;
case '3':cout << "san "; break;
case '4':cout << "si "; break;
case '5':cout << "wu "; break;
case '6':cout << "liu "; break;
case '7':cout << "qi "; break;
case '8':cout << "ba "; break;
case '9':cout << "jiu "; break;
default:cout << "wrong" << endl;
}
}
switch (s[s.length()-1])
{
case '0':cout << "ling"; break;
case '1':cout << "yi"; break;
case '2':cout << "er"; break;
case '3':cout << "san"; break;
case '4':cout << "si"; break;
case '5':cout << "wu"; break;
case '6':cout << "liu"; break;
case '7':cout << "qi"; break;
case '8':cout << "ba"; break;
case '9':cout << "jiu"; break;
default:cout << "wrong" << endl;
}
//又重复写了一遍是因为,第一次输出的拼音后面有一个空格,导致无法通过PAT的 //检测,这样写确实很繁琐,我再考虑考虑有没有简化的方法,下面的两个switch //也是这个原因。
}
else
{
for (int i = 0; i < s.length()-1; i++)
{
switch (s[i])
{
case '0':cout << "ling "; break;
case '1':cout << "yi "; break;
case '2':cout << "er "; break;
case '3':cout << "san "; break;
case '4':cout << "si "; break;
case '5':cout << "wu "; break;
case '6':cout << "liu "; break;
case '7':cout << "qi "; break;
case '8':cout << "ba "; break;
case '9':cout << "jiu "; break;
default:cout << "wrong" << endl;
}
}
switch (s[s.length() - 1])
{
case '0':cout << "ling"; break;
case '1':cout << "yi"; break;
case '2':cout << "er"; break;
case '3':cout << "san"; break;
case '4':cout << "si"; break;
case '5':cout << "wu"; break;
case '6':cout << "liu"; break;
case '7':cout << "qi"; break;
case '8':cout << "ba"; break;
case '9':cout << "jiu"; break;
default:cout << "wrong" << endl;
}
}
return 0;
}
13、计算阶乘和
对于给定的正整数N,需要你计算 S = 1! + 2! + 3! + ... + N!。
输入格式:
输入在一行中给出一个不超过10的正整数N。
输出格式:
在一行中输出S的值。
输入样例:3
输出样例:9
简单题,不多说
#include
#include
using namespace std;
int fun(int x);
int main()
{
int n, sum = 0;//n为输入数字,sum为阶乘和
cin >> n;
for (int i = n; i >0; i--)
{
sum += fun(i);
}
cout <
return 0;
}
int fun(int x)
{
if (x==1||x==0)
{
return 1;
}
else
{
return (x*fn(x - 1));
}
}
补充题:大数计算
计算一个不大于10的正整数的n次方
例如,计算2的100次方,7的34次方,超出了long int的范围
#includeusing namespace std;
int main()
{
int x, c = 0, n,k = 0;//c表示进位数,k表示输出数字的位数cout << "请输入x的n次方中的x和n(x小于10)" << endl;
cin >> x;
cin >> n;
//这里我们主要讨论的是大数算法,不考虑输入时出现0^0或0^n这样的情况 //不考虑x大于10的情况if (n==0)
{
cout << x << "的" << "0次方是:1";
}
else
{int *arr = new int[n];//定义动态数组arr[0] = 1;
cout << x << "的" << n << "次方是:";
for (int i =1; i <= n; i++)//n次相乘{
for (int j = 0; j <= k; j++)//总是从最低位开始乘{
arr[j] = arr[j] * x + c;
c = arr[j] / 10;
arr[j] = arr[j] % 10;
}
if (c)//向前进位{
k++;
arr[k] = c;
c = 0;
}
}
for (; k>=0; k--)
{
cout << arr[k];
}
cout << endl;
delete[] arr;
}
return 0;
}