19武科上机

1.IP转换

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;

void sovle(int n){
// 将十进制n输出为8位的二进制 
	for(int i=7; i>=0; i--) {	//从高到低输出每一个二进制 
		if(n & 1<<i) {			// 用按位与来判断当前为是1还是0 
			printf("1");
		} else {
			printf("0");
		}
	} 
}
void sovle2(int n) {
	int a[8];
	for(int i=0; i<8; i++) {	// 从低到高取出二进制的每一位 
		a[i] = n%2;
		n /= 2;
	}
	for(int i=7; i>=0; i--) {	// 倒着输出 
		printf("%d", a[i]);
	}
} 
int main(){
	int a[4];
	while(scanf("%d.%d.%d.%d", &a[0],&a[1],&a[2],&a[3])==4) {
		for(int i=0; i<4; i++) {
			if(i) printf(".");
			sovle2(a[i]);
		}	
		printf("\n");
	} 
	return 0;
}

2.不重复数

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;

bool fun(int n) {
// 判断n是否不存在连续两位相同
	while(n>10) {
		if(n%10 == n/10%10) return false;	// 个位和十位相等
		n /= 10;	// 擦除个位 
	} 
	return true;
}
int main(){
	int n;
	while(scanf("%d", &n)==1) {
		do{
			n++;
		} while(!fun(n));
		printf("%d\n", n);
	}
	return 0;
}

3.跳码

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;

const int n = 5;
int vis[n][n];	// vis[i][j]标记(i,j)结点是否访问 
int path[n*n];	// 记录遍历路径 
int dir[8][2] = {{-1,-2},{-1,2},{-2,1},{-2,-1},{1,-2},{1,2},{2,-1},{2,1}};	// 8个方向 

int cnt = 0;	// 记录有多少种方案 
int first = 1;
void dfs(int r, int c, int step) {
// dfs访问整个图,当前step步访问结点是(r,c) 
	vis[r][c] = 1;			// 标记(r,c)访问	
	path[step] = r*n+c+1;	// 当前访问
	int nr, nc;
	if(step==n*n-1) {	// 成功访问完所有结点 
		cnt++;		// 方案数+1
		if(first) {	// 输出第一种 
			for(int i=0; i<n*n; i++) {	
				printf("[%d,%d]\n", i+1, path[i]);
			}
			first = 0;
		}
	}
	for(int i=0; i<8; i++) {	// 尝试访问八个邻接结点 
		nr = r+dir[i][0], nc = c+dir[i][1];		// 下一步位置 
		if(0<=nr && nr<n && 0<=nc && nc<n && !vis[nr][nc]) {	// 位置合法并且没有访问 
			dfs(nr, nc, step+1);
		}
	}
	vis[r][c] = 0;	// 回溯前清空标记 
} 
int main(){
	dfs(0,0,0);
	printf("%d\n", cnt);
	return 0;
}

4.字符串统计

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn = 1000;	// 句子长度小于1000 
char s[maxn]; 
int main(){
//	scanf("%s", s);		// 遇到空白符(空格、换行、Tab)接回停止输入
	while(NULL!=fgets(s, maxn, stdin)) {
		// 一次接受一行数据
		int len = strlen(s);	// 得到字符串的长度
		len--;					// 去掉换行符 
		int cnta = 0;			// 统计字母个数
		int cntWord = 0;		// 统计单词数量 
		int temp[26];			// temp[0]保存A和a出现的次数,1保存B和b,... 
		memset(temp, 0, sizeof(temp));		// 初始化数组temp 
		for(int i=0; i<len; i++) {	// 遍历字符串 
			if('a'<=s[i] && s[i]<='z'  || 'A'<=s[i] && s[i]<='Z') {	// 当前是字母 
				cnta++;
				if(i+1<len && s[i+1]==' ') {	// 当前是字母,下一个字符是空格,视为单词的分割 
					cntWord++;
				}
				if('a'<=s[i] && s[i]<='z') {	// 小写字母 
					temp[s[i]-'a']++;
				} else {						// 大写字母 
					temp[s[i]-'A']++;
				}
			}
		} 
		printf("字母个数:%d\n", cnta);
//		cntWord += (s[len-1]!=' ');	// 最后这个单词可能没有统计 
//		printf("len=%d, %d\n", len, s[len-1]!=' ');
		if(s[len-1]!=' ') cntWord++;
		printf("单词个数:%d\n", cntWord);
		
		int maxcnt = 0;	// 记录最多字母出现次数 
		for(int i=0; i<26; i++) {	// 遍历26个字母 
			if(temp[i]>maxcnt) maxcnt = temp[i];
		} 
		printf("出现次数最多的字母:");
		int first = 1;		// 标记第一次输出 
		for(int i=0; i<26; i++) {  
			if(temp[i] == maxcnt) {
				if(!first) printf(","); 
				first = 0;	
				printf("%c", i+'a');
			} 
		} 
		printf("\n出现次数:%d\n", maxcnt);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值