1.階乘數。輸入一個正整數,輸出時,先輸出這個數本身,跟着一個逗號,再輸出這個數的各位數字的階乘和,等號,階乘和的計算結果,並判斷階乘和是否等於原數,如果相等輸出Yes,否則輸出No。各數字均不會超出INT的範圍
輸入 145
輸出
145,1!+4!+5!=145
Yes
輸入 1400
輸出
1400,1!+4!+0!+0!=27
No
#include "stdafx.h"
#include <iostream>
#include <string>
#include "math.h"
#include "stdio.h"
#include "string.h"
#include "ctype.h"
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
using namespace std;
int jiecheng(int n){
int result=1;
for(int i=n;i>0;i--)
result*=i;
return result;
}
int main(int argc, char* argv[])
{
int n,n1;
int num[100];
int m=0;
int sum=0;
scanf("%d",&n);
n1=n;
while(n1!=0){
num[m++]=n1%10;
n1/=10;
}
printf("%d,",n);
for(int i=m-1;i>0;i--){
printf("%d!+",num[i]);
sum+=jiecheng(num[i]);
}
printf("%d!=",num[0]);
sum+=jiecheng(num[0]);
printf("%d\n",sum);
if(sum==n) printf("yes");
else printf("no");
return 0;
}
2.五子棋。輸入一個19*19的矩陣,只包含數字0、1、2,表示兩人下五子棋的棋牌狀態,1、2分別表示兩人的棋子,0表示空格。要求判斷當前狀態下是否有人獲勝(橫向、豎向或者斜線方向連成5個同色棋子)。題目說明輸入樣例保證每條線上至多隻有連線5個同色棋子,並且保證至多隻有1人獲勝。如果有人獲勝,輸出獲勝者1或2,加一個冒號,接着輸出獲勝的五連珠的第一個棋子的座標,從上到下從左到右序號最小的爲第一個,序號從1開始編號。如果無人獲勝,輸出No。
輸入
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0
輸出 No
#include "stdafx.h"
#include <iostream>
#include <string>
#include "math.h"
#include "stdio.h"
#include "string.h"
#include "ctype.h"
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
using namespace std;
int panduan(int qipan[19][19],int &rx,int &ry){
int result=0;
int t;
for(int i=0;i<19;i++){
for(int j=0;j<19;j++){
if(qipan[i][j]!=0){
t=qipan[i][j];
if(j<19-4){
if(t==qipan[i][j+1]&&t==qipan[i][j+2]&&t==qipan[i][j+3]&&t==qipan[i][j+4])
{
rx=i;
ry=j;
return qipan[i][j];
}
}
if(i<19-4){
if(t==qipan[i+1][j]&&t==qipan[i+2][j]&&t==qipan[i+3][j]&&t==qipan[i+4][j])
{
rx=i;
ry=j;
return qipan[i][j];
}
}
if(i<19-4&&j<19-4){
if(t==qipan[i+1][j+1]&&t==qipan[i+2][j+2]&&t==qipan[i+3][j+3]&&t==qipan[i+4][j+4])
{
rx=i;
ry=j;
return qipan[i][j];
}
}
if(i<19-4&&j>3){
if(t==qipan[i+1][j-1]&&t==qipan[i+2][j-2]&&t==qipan[i+3][j-3]&&t==qipan[i+4][j-4])
{
rx=i;
ry=j;
return qipan[i][j];
}
}
}
}
}
return 0;
}
int main(int argc, char* argv[])
{
int qipan[19][19];
int i,j;
for(i=0;i<19;i++)
for(j=0;j<19;j++)
scanf("%d",&qipan[i][j]);
int result=panduan(qipan,i,j);
if(result==0)printf("no");
else {
printf("%d:(%d,%d)",result,i,j);
}
return 0;
}
3.排版題。輸入若干行字符,表示某電影的演職員表,每行只有一個冒號,冒號前面是職位,冒號後面是姓名,要求把各行冒號對齊,刪除多餘空格後輸出。先輸入一個數字,表示排版要求的冒號位置,該位置號保證比各行冒號前的最大字符數還要大。再輸入若干行字符,最多50行,每行最多100個字符,除空格、製表符和回車之外都是有效字符,要求每行的冒號處於格式要求的位置,冒號兩邊與有效單詞之間各有一個空格,冒號前面的單詞之間只有一個空格(刪除多餘的空格和製表符),在冒號左邊右對齊,前面全由空格填充,冒號後面的單詞之間也只有一個空格,在冒號右邊左對齊,最後一個單詞後不加空格直接換行。
#include "stdafx.h"
#include <iostream>
#include <string>
#include "math.h"
#include "stdio.h"
#include "string.h"
#include "ctype.h"
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
using namespace std;
int main(int argc, char* argv[])
{
int mao=50;
char c;
char s[50][100];
int maoindex[50];
int si=0,i=0,spaceflag=0;
scanf("%d",&mao);
getchar();
while((c=getchar())!=EOF){
if(c==' ') {
if(spaceflag==1||i==0) continue;
spaceflag=1;
}
if(c=='\n') {
if(spaceflag==0){
s[si++][i]=0;
i=0;
//printf("%s",s[si-1]);
continue;
}else{
s[si++][i-1]=0;
i=0;
//printf("%s",s[si-1]);
continue;
}
}
if(c==':') {
if(spaceflag==0){
s[si][i++]=' ';
}
maoindex[si]=i;
}
s[si][i++]=c;
if(c==':') {
s[si][i++]=' ';
}
if(c!=' ') {
spaceflag=0;
}
}
for(int j=0;j<si;j++){
for(int k=0;k<mao-maoindex[j];k++){
printf(" ");
}
printf("%s\n",s[j]);
}
return 0;
}