1. 【应用】安全的密码
随着电子设备的广泛运用,密码也渐渐融入每个人的生活。保护好密码,不仅关系到个人隐私,更关系到个人的财产和安全。一个安全的密码,最好由大小写字母、数字或符号组成。包含越多种类的字符,其安全性就越高。同时密码还需要有一定的长度,通常至少要由六个以上的字符组成。
并不是每个人都喜欢这样复杂的密码,很多人在设置密码的时候,喜欢使用自己的名字或者生日,但这是很大的安全隐患。
任务
林伟翔正在设计一个网络交易系统,为了保证用户的密码安全,他需要一个程序,判断用户自己设置的密码是否安全,如果不安全,则给出提示。现在他向你求助,请你帮忙设计一个程序来解决这个问题。
应当按照以下的规则来判断密码是否安全:
如果密码长度小于 6 位,则不安全
如果组成密码的字符只有一类,则不安全
如果组成密码的字符有两类,则为中度安全
如果组成密码的字符有三类或以上,则为安全
通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。
输入
输入的第一行是一个整数 N,表明后面有多少组密码。随后的 N 行输入包括 N 个密码,每个密码的长度均小于 20 个字符。
输出
针对每一个密码判断并输出它是否安全。对于不安全的密码输出 “Not Safe”,对于中度安全的密码输出 “Medium Safe”,对于安全的密码输出 “Safe”
输入样例
4
1234
abcdef
ABC123
1#c3Gh
输出样例
Not Safe
Not Safe
Medium
Safe
Safe
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv) {
int i, shu = 0, len, n, j;
static char a[25];
scanf("%d", &n);
for(i=0;i<=n;i++)
{
gets(a);
if
(a[0]=='\0')
{
}
else
{
len = strlen(a);
for(j=0; j<len; j++)
{
if(a[j]>47&&a[j]<58)
{
shu++;
break;
}
}
for(j=0; j<len; j++)
{
if(a[j]>64&&a[j]<91)
{
shu++;
break;
}
}
for(j=0; j<len; j++)
{
if(a[j]>96&&a[j]<123)
{
shu++;
break;
}
}
for(j=0; j<len; j++)
{
if(a[j]<=47||(a[j]<65&&a[j]>57)||(a[j]>90&&a[j]<97)||(a[j]>122))
{
shu++;
break;
}
}
if(shu==1||len<6)
{
printf("Not Safe\n");
}
else
{
if(shu==2)
{
printf("Medium Safe\n");
}
else
{
printf("Safe\n");
}
}
shu = 0;
static a;
}
}return 0;
}
**
2. 【日期】车辆限行
**
2012年4月1日,北京市人民政府根据《中华人民共和国道路交通安全法》和《北京市实施〈中华人民共和国大气污染防 治法〉办法》有关规定,自2012年4月11日起,继续对机动车实施按车牌尾号工作日高峰时段 区域限行交通管理措施。
根据规定,按车牌尾号限行的机动车车牌尾号分为五组,每13周轮换一次限行日,分别为:
(1) 自2012年4月9日至2012年7月7日,星期一至星期五限行机动车车牌尾号分别为:3和8、4和9、5和0、1和6、2和7(含临时号牌,机动车车牌尾号为英文字母的按0号管理,下同);
(2) 自2012年7月8日至2012年10月6日,星期一至星期五限行机动车车牌尾号分别为:2和7、3和8、4和9、5和0、1和6;
(3) 自2012年10月7日至2013年1月5日,星期一至星期五限行机动车车牌尾号分别为:1和6、2和7、3和8、4和9、5和0;
(4) 自2013年1月6日至2013年4月10日,星期一至星期五限行机动车车牌尾号分别为:5和0、1和6、2和7、3和8、4和9。
现给出 2012 年 4 月 9 日之后的任意日期,如果不考虑国家统一的公假,只考虑日期一个因素,请计算指定日期要限行的车牌尾号。
#include <stdio.h>
int judge(int,int,int);
int tianshu(int,int,int);
void xianhao(int , int);
int main(int argc, char** argv) {
int y, m, d, i, j, xingqiji, day, shu,shuai;
scanf("%d %d %d", &y, &m, &d);
xingqiji = judge(y,m,d);
if (xingqiji==6||xingqiji==0)
{
printf("Free.\n");
}
else
{
day = tianshu(y,m,d);
shu = (day/91)%5;
if(shu == 0)
{
switch (xingqiji)
{
case 1: printf("3 and 8.\n"); break;
case 2: printf("4 and 9.\n"); break;
case 3: printf("5 and 0.\n"); break;
case 4: printf("1 and 6.\n"); break;
case 5: printf("2 and 7.\n"); break;
}
}
if(shu==1)
{
switch (xingqiji)
{
case 2: printf("3 and 8.\n"); break;
case 3: printf("4 and 9.\n"); break;
case 4: printf("5 and 0.\n"); break;
case 5: printf("1 and 6.\n"); break;
case 1: printf("2 and 7.\n"); break;
}
}
if(shu==2)
{
switch (xingqiji)
{
case 3: printf("3 and 8.\n"); break;
case 4: printf("4 and 9.\n"); break;
case 5: printf("5 and 0.\n"); break;
case 1: printf("1 and 6.\n"); break;
case 2: printf("2 and 7.\n"); break;
}
}
if(shu==3)
{
switch (xingqiji)
{
case 4: printf("3 and 8.\n"); break;
case 5: printf("4 and 9.\n"); break;
case 1: printf("5 and 0.\n"); break;
case 2: printf("1 and 6.\n"); break;
case 3: printf("2 and 7.\n"); break;
}
}
if(shu==4)
{
switch (xingqiji)
{
case 5: printf("3 and 8.\n"); break;
case 1: printf("4 and 9.\n"); break;
case 2: printf("5 and 0.\n"); break;
case 3: printf("1 and 6.\n"); break;
case 4: printf("2 and 7.\n"); break;
}
}
}
}
int judge(int y,int m,int d)
{
int w;
if(3 > m)
{m+= 12;
y--;}
w=((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1)%7;
return w;
}
int tianshu(int y2,int m2,int d2)
{
int a=0,b=0,j=0,k=0,i,y1,m1,d1,c=0,g=0,e=0,f=0;
y1 = 2012;
m1 = 4;
d1 = 9;
a=d1;
j=m1;
k=m2;
m1--;
for(i=m1;i>0;i--)
{
switch (i)
{
case 0: a+=0; break;
case 1: a+=31; break;
case 2: a+=28; break;
case 3: a+=31; break;
case 4: a+=30; break;
case 5: a+=31; break;
case 6: a+=30; break;
case 7: a+=31; break;
case 8: a+=31; break;
case 9: a+=30; break;
case 10: a+=31; break;
case 11: a+=30; break;
case 12: a+=31; break;
}
}
b=d2;
m2--;
for(i=m2;i>0;i--){
switch (i)
{ case 0: b+=0; break;
case 1: b+=31; break;
case 2: b+=28; break;
case 3: b+=31; break;
case 4: b+=30; break;
case 5: b+=31; break;
case 6: b+=30; break;
case 7: b+=31; break;
case 8: b+=31; break;
case 9: b+=30; break;
case 10: b+=31; break;
case 11: b+=30; break;
case 12: b+=31; break;
}
}
if(y1==y2)
{ c=b-a;
g=0;
for(i=y2-1;i>y1;i--)
{ if ((i%4==0&&i%100!=0)||i%400==0)
g++;
}
if (((y2%4==0&&y2%100!=0)||y2%400==0)&&k>2){
g++;}
if (( (y1%4==0&&y1%100!=0)||y1%400==0)&&j<2){
g++;}
c=c+g;
}
else {
a=365-a;
e=y2-y1-1;
c=b+a+(365*e);
f=0;
for(i=y2-1;i>y1;i--)
{ if ((i%4==0&&i%100!=0)||i%400==0)
f++;
}
if (((y2%4==0&&y2%100!=0)||y2%400==0)&&k>2){
f++;}
if (( (y1%4==0&&y1%100!=0)||y1%400==0)&&m1<2){
f++;}
c=c+f;
}
return c;
}
3. 组成最大数
任意输入一个自然数(<10^100),输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。
输入:自然数 n
输出:各位数字组成的最大数
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv) {
static char a[1000];
int i,j,m,len;
gets(a);
len = strlen(a);
for(j=1;j<=len-1;j++)
{
for(i=0;i<len-1;i++)
{
if(a[i]<a[i+1])
{ m = a[i];
a[i] = a[i+1];
a[i+1] = m;
}
}
}
printf("%s\n",a);
}
4. 【字符】缩写展开
在保存字符串时,对出现在连续位置的若干个字符,如这些字符在ASCII表中也是连续出现,则可以将这些字符使用缩写形式进行保存,以节省保存空间。例如用 A-Z 表示 ABCD…XYZ,1-5 表示12345,c-f 表示 cdef。
输入:
包含缩写形式的字符串
输出:
将缩写形式进行还原后的字符串
说明:
只对压缩后的字符串处理大、小写字母和数字,即对于形如 A-9,a-C 这样的缩写不进行处理。
#include <stdio.h>
#include <string.h>
void zhankai(char *);
int judge(char,char);
int main(int argc, char** argv) {
static char a[1000];
int i,j,len;
char *p;
gets(a) ;
len = strlen(a);
for(i=0;i<len;i++)
{
if (a[i]!='-')
{
printf("%c", a[i]);
}
else
{
p = (a+i);
zhankai(p);
}
}
printf("\n");
}
void zhankai(char *p)
{
char a,b;
int i;
char j;
b = *(p+1) ;
a = *(p-1) ;
i = judge(a,b);
if(i == 0)
{
printf("-");
}
else
{
for(j=a+1;j<b;j++)
{
printf("%c", j);
}
}
}
int judge(char a, char b)
{
if(a>=b)
{
return 0;
}
else
{
if(a>47&&a<58)
{
if(b>47&&b<58)
{
return 1;
}
else
{
return 0;
}
}
if(a>64&&a<91)
{
if(b>64&&b<91)
{
return 1;
}
else
{
return 0;
}
}
if(a>96&&a<123)
{
if(b>96&&b<123)
{
return 1;
}
else
{
return 0;
}
}
return 0;
}
}
5. 学生成绩排序
大家参加了期末考试,成绩出来后老师要对 n 个学生进行成绩汇总和排序。要求程序按成绩降序进行排序。在排序过程中对于成绩相同的学生,要按照输入数据的顺序进行排列。例如:有5名学生的成绩:
zhang1,90
zhang2,91
zhang3,99
zhang4,91
zhang5,98
则排序结果应该为:
zhang3,99
zhang5,98
zhang2,91
zhang4,91
zhang1,90
请注意例题中“zhang2”和“zhang4”的排列顺序。
#include<stdio.h>
#include<string.h>
int main()
{
int n,t,i,j;char null;
scanf("%d%c",&n,&null);
char a[n][100],c[100];
int b[n];
for(i=0;i<n;i++)
{for(j=0;;j++)
{scanf("%c",&a[i][j]);
if(a[i][j]==',')
{a[i][j]='\0';break;}
}scanf("%d%c",&b[i],&null);
}
for(i=0;i<n-1;i++)
{for(j=0;j<n-1-i;j++)
{if(b[j]<b[j+1]){t=b[j];b[j]=b[j+1];b[j+1]=t;
strcpy(c,a[j]);strcpy(a[j],a[j+1]);strcpy(a[j+1],c);
}
}
}
for(i=0;i<n;i++)
{printf("%s,",a[i]);printf("%d\n",b[i]);}
}