这个是本萌新准备找工作时自己在网上刷的题目和自己写的答案,类似的答案在网上很多,我也的答案也算不上好,仅仅是留下来做个备份(所有答案由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;

}