北航上机试题2013(题目+代码)

https://apriljia.com/2018/07/16/%E5%8C%97%E8%88%AA%E4%B8%8A%E6%9C%BA%E8%AF%95%E9%A2%982013%EF%BC%88%E9%A2%98%E7%9B%AE%E4%BB%A3%E7%A0%81%EF%BC%89/

1.给一个真分数的分子分母,输出约分后的分子分母。

#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 a,b;   //a/b
	scanf("%d %d",&a,&b);
	int stop=0,i=0;
	while(!stop){
		stop=1;
		for(i=2;i<=sqrt(a);i++){
			if(a%i==0&&b%i==0){
				stop=0;
				a/=i;
				b/=i;
			}
		}
	}
	printf("%d %d",a,b);
	return 0;
}

2.八皇后
在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
输出 92
#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; 

void mark(int board[8][8],int x,int y){
	int i,j;
	for(i=0;i<8;i++)
		board[i][y]=1;
	for(j=0;j<8;j++)
		board[x][j]=1;
	for(i=x,j=y;i<8&&j<8;i++,j++)
		board[i][j]=1;
	for(i=x,j=y;i>=0&&j>=0;i--,j--)
		board[i][j]=1;
	for(i=x,j=y;i>=0&&j<8;i--,j++)
		board[i][j]=1;
	for(i=x,j=y;i<8&&j>=0;i++,j--)
		board[i][j]=1;
}
//3681*752 4
//1237246* no
int main(int argc, char* argv[])
{	 
	int board[8][8]={0};
	int i,j;
	char c;
	for(i=0;i<8;i++)
		for(j=0;j<8;j++)
			board[i][j]=0;
	for(i=0;i<8;i++){
		scanf("%c",&c);
		if(c=='*') {
			j=i;
			continue;
		}
		mark(board,i,c-'0'-1);
	}
	int flag=0;
	for(i=0;i<8;i++){
		if(board[j][i]==0){
			flag=1;
			printf("%d",i+1);
			break;
		}
	}
	if(flag==0)
		printf("no");
	return 0;
}

3.给出一个标准输入的正数(开头末尾没有多余的零),输出其科学计数法表示结果。比如0.000002,输出2e-6,输入123.456输出1.23456e2.

#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[])
{	 
	char c;
	char str[100];
	int dotindex=0,startindex=0,dotflag=0;
	int i,n=0;
	while(scanf("%c",&c)!=EOF){
		if(c=='\n') break;
		if(c=='.') {
			dotindex=n;
			dotflag=1;
			continue;
		}
		if(c=='0') startindex=n+1;
		str[n++]=c;
	}

	if(startindex==n-1){
		printf("%c",str[startindex]);
	}else{
		printf("%c",str[startindex]);
		printf(".");
		for(i=startindex+1;i<n;i++)
			printf("%c",str[i]);
	}
	printf("e");
	if(dotflag==0){
		printf("%d",n-1);
	}else{
		printf("%d",dotindex-startindex-1);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/mingzhiqing/article/details/81062929
今日推荐