nyoj1307Linux的文件权限对不对

题目链接http://acm.nyist.net/JudgeOnline/problem.php?pid=1307

Linux的文件权限对不对?
时间限制: 1000  ms  |  内存限制: 65535  KB      难度: 2

描述
 数字与权限表示的对应关系如下(注意没有 --- = 0 的对应关系) r-- = 4  -w- = 2  --x = 1  rw- = 6  r-x = 5  -wx = 3  rwx = 7

输入
输入文件的第一行是一个整数T,表示有T组数据。 接下来是T组数据,每个数据有两行,第一行是命令(二)中的数字,第二行是表示文件权限的字符串。
输出
数字和字符串表示含义一致,则输出“Yes”(不带双引号),否则输出“No”
样例输入
4
666
-rw-rw-rw-
777
wrwxrwxrwx
888
-r--r--r--
111
-r--r--r-x
样例输出
Yes
No
No
No

AC代码:

#include <stdio.h>
int main() {
	int t;
	char b[20], s[29] = " --x-w--wxr--r-xrw-rwx      ";//1+3*9+1
	//s按1--x, 2-w-, 3-wx...顺序存放  s[0]存放一个空格的目的是方便 标记1 处的操作; 
	//后面放6个空格,8和9其实只是个幌子,8、9根本没有可对应的符号 
	scanf("%d", &t);
	while(t--) {
		char a[4], flag = 1, t, ts;
		int i, j, k;
		scanf("%s%s", a, b);
		for(i = 0; i < 3; i++) {
			k = a[i]-'0'-1;//当a长度不达3时,如66 -rw-rw-, a[2]为0,k为负值,此题没有此情况
			// 当a[0]='0'时也为负,题中也说了没有此情况,故可不处理 
			for(j = 1; j <= 3; j++) {
				t = b[i*3+j];//j从1开始免去此处i*3+j+1的+1
				if(k<0) ts=' ';//k为负值时的处理,s[0]为空格 
				else ts=s[k*3+j];
				if(/*标记1*/ts != t || t == 0) break;
				//字符不匹配||长度小于1+9 则break 
			}
			if(j <= 3) {
				flag = 0;
				break;
			}
		}
		if(b[0] != '-' || b[10] != 0) flag = 0;
		//输入的字符串按规则b[0]应当是-,b[10]!=0说明超过规定长度 
		if(flag) printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值