//数组逆时针打印
#include<iostream>
using namespace std;
int main() {
int n, m, i, j;
cin >> m >> n;
int arr[m][n];
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
cin >> arr[i][j];
}
}
for (i = 0; i < (m + 1) / 2 && i < (n + 1) / 2; i++) //每次打印都会打印一圈,所以会减少两行两列
{
for (j = i; j < m - i; j++) // 向下打印
cout << arr[j][i];
for (j = i + 1; j < n - i; j++) // 向右打印
cout << arr[m - i - 1][j];
if (n - i - 1 > i) // 向上打印的条件
{
for (j = m - i - 2; j >= i; j--)
cout << arr[j][n - i - 1];
}
if (m - i - 1 > i) // 向左打印的条件: 总列数 -
// 第i次打印
// ,因为每次打印下界限都要减去1
// 是否可以打印的条件是
// 上下界限不重叠
{
for (j = n - i - 2; j > i; j--)
cout << arr[i][j];
}
}
return 0;
}
#include <iostream>
using namespace std;
#define M 100
int a[M], b[M], c[M];
int main() {
int i, k;
string e, f;
cin >> e;
cin >> f;
for (i = 0; i < e.length(); i++)
a[i] = e[i] - '0';
for (i = 0; i < f.length(); i++)
b[i] = f[i] - '0';
for (i = 0; i < e.length() || i < f.length(); i++) {
if (i < e.length())
c[i] += a[e.length() - i - 1];
if (i < f.length())
c[i] += b[f.length() - i - 1];
if (c[i] >= 10) {
c[i + 1] = c[i] / 10;
c[i] %= 10;
}
}
for (i = M - 1; i > 0; i--)
if (c[i])
break;
for (int j = i; j >= 0; j--)
cout << c[j];
}
/*
问题描述
一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中;而35!就更大了,它已经无法存放在一个浮点型变量中。因此,当n比较大时,去计算n!是非常困难的。幸运的是,在本题中,我们的任务不是去计算n!,而是去计算n!最右边的那个非0的数字是多少。例如,5!
= 1*2*3*4*5 =
120,因此5!最右边的那个非0的数字是2。再如:7! =
5040,因此7!最右边的那个非0的数字是4。请编写一个程序,输入一个整数n(n<=100),然后输出n!
最右边的那个非0的数字是多少。
输入格式:输入只有一个整数n。
输出格式:输出只有一个整数,即n!
最右边的那个非0的数字。 输入输出样例 样例输入 6
样例输出 2
*/
#include<string>
#include<iostream>
#include <sstream>
using namespace std;
long fac(int n)
{
long int pro = 1;
if (n == 1)
return 1;
else
pro = fac(n - 1) * n;
return pro;
}
int main()
{
int N;
cin >> N;
cout << N << "!=" << fac(N) << endl;
ostringstream os;
os << fac(N);
string result;
istringstream is(os.str());
is >> result;
string b = result;
int l = b.length();
for (int i = l - 1; i > 0; i--)
{
if (b[i] != '0')
{
cout << b[i];
break;
}
}
return 0;
}
- 质数的和与积(两个质数的和是S,他们的积最大是多少?)
#include<iostream>
using namespace std;
int sushu(int a)
{
if (a < 2)
return 1;
for (int i = 2; i <= a - 1; i++)
{
if (a % i == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int N,j=0;
int sum=1;
cin >> N;
for(int i=50;i>0;i--){
if (sushu(i) && sushu(j))
{
if(i*j>sum)
{
sum=i*j;
cout << "这个数"<<i<<","<<j<<"是素数\n";
}
}
j++;
}
cout<<sum<<endl;
return 0;
}
- 不定方程求解(给定a,b,c,求ax+by=c,关于未知数x和y的解)
#include<iostream>
using namespace std;
int main(){
int a=2,b=3,c=18;
int count=0;
for(int i=0;i<1000;i++){
for(int j=0;j<1000;j++){
if(a*i+b*j==c){
count++;
cout<<i<<","<<j<<endl;
}
}
}
cout<<count<<endl;
return 0;
}
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<string>
using namespace std;
typedef struct card
{
int Suit; // 花色
string Number; // 牌数
} Card;
Card OneCard[52];
void showCard()
{
string sign;
for (int i = 0, j = 0; i < 52, j < 52; i++, j++)
{
if (!(j % 13))
{
cout << endl;
}
switch (OneCard[i].Suit)
{
case 0:
sign = "菱形";
break;
case 1:
sign = "红桃";
break;
case 2:
sign = "梅花";
break;
case 3:
sign = "黑桃";
break;
default:
;
}
cout<<sign<<OneCard[i].Number<<" ";
}
cout << endl;
}
void Shuffle()
{
int i, j, temp;
int suit;
Card tempcard;
suit = -1;
for (i = 0; i < 52; i++)
{
if (i % 13 == 0)
{
++suit;
}
OneCard[i].Suit = suit;
temp = i % 13;
switch (temp)
{
case 0:
OneCard[i].Number = 'A';
break;
case 9:
OneCard[i].Number = "10";
break;
case 10:
OneCard[i].Number = 'J';
break;
case 11:
OneCard[i].Number = 'Q';
break;
case 12:
OneCard[i].Number = 'K';
break;
default:
OneCard[i].Number = temp + '1';
break;
}
}
cout << "新牌的初始排列如下:" << endl;
showCard();
srand(time(NULL));
for (i = 0; i < 52; i++)
{
j = rand() % 52;
tempcard = OneCard[j];
OneCard[j] = OneCard[i];
OneCard[i] = tempcard;
}
}
int main()
{
Shuffle();
cout<<"\n该牌洗后的排列如下:"<<endl;
showCard();
for(int j=0;j<52;j++)
{
if (!(j % 13))
{
cout << endl;
}
cout<<OneCard[j].Suit<<" ";
}
return 0;
}