1、 输入N个字符,字符在ACSII码范围内(0~127)。
#include<stdio.h>
#define N 128
int main()
{
int i=0,count=0;
int ASIC[N]={0};
char input[500];
gets(input);
while(input[i]!='\0')
{
ASIC[input[i]]++;
i++;
}
for(i=0;i<N;i++)
{
if(ASIC[i])
{
count++;
}
}
printf("%d\n",count);
count=0;
return 0;
}
2、
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
输入例子:
9876673
输出例子:
37689
#include<stdio.h>
int main(){
int i,j,flag,inputNum,outputNum=0;
int a[100]={0};
while(scanf("%d",&inputNum)!=EOF){
for(i=0;inputNum>0;i++){
flag=0;
a[i]=inputNum%10;
for(j=0;j<i;j++){
if(a[i]==a[j]){
flag=1;
i--;
break;
}
}
if(flag!=1) {outputNum=outputNum*10+inputNum%10;}
inputNum=inputNum/10;
}
printf("%d",outputNum);
}
return 0;
}
3、排序并且去重,也可以应用到asic码排序 并且去重复
#include<stdio.h>
#include<string.h>
void sort_delate(char* str)
{
char *temp=str;
int i,j,n,temp1;
n=strlen(str);
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(temp[j]>temp[j+1])
{
temp1=temp[j];
temp[j]=temp[j+1];
temp[j+1]=temp1;
}
}
}
j=1;
*str=*temp;
for(i=1;i<n;i++)
{
if(temp[i]!=temp[i-1])
{
str[j]=temp[i];
j++;
}
}
str[j]='\0';
}
int main()
{
char str[200];
while(gets(str)!=NULL)
{
sort_delate(str);
printf("%s\n",str);
}
return 0;
}
4、循环输出 abcdef 4 cdefab
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void xunhuan(char* str,int n)
{
if(str==NULL||n==0)
return;
int len=strlen(str);
char temp[100];
strcpy(temp,str+len-n);
strcpy(temp+n,str);
*(temp+len)='\0';
strcpy(str,temp);
}
void xunhuan1(char* str,int n)
{
if(str==NULL||n==0)
return;
int len=strlen(str);
char*temp=(char*)malloc(sizeof(100));
memcpy(temp,str+len-n,n);
memcpy(temp+n,str,len-n);
memcpy(str,temp,len);
free(temp);
}
int main()
{
int n;
char a[100];
while(gets(a))
{
scanf("%d",&n);
xunhuan(a,n);
printf("%s\n",a);
}
return 0;
}
5、判断身份证是否符合格式
#include<stdio.h>
#include<string.h>
//#include<stdlib.h>
int hefa(int year,int month,int day);
int atoi(char*str,int n);
int shenfenzheng(char* str)
{
int i,flag=0;
int year,month,day;
int len=strlen(str);
if(len!=18)
return 1;
else
{
for(i=0;i<17;i++)
{
while(str[i]<'0'||str[i]>'9')
return 2;
}
if(str[17]!='x'&&(str[17]<'0'||str[17]>'9'))
return 3;
year=atoi(str+6,4);
month=atoi(str+10,2);
day=atoi(str+12,2);
if(year>2100||year<1900)
return 4;
if(month>12||month<1)
return 5;
if(!hefa(year,month,day))
return 6;
}
return flag;
}
int atoi(char*str,int n)
{
int i,count=0;
for(i=0;i<n;i++)
count=count*10+str[i]-'0';
return count;
}
int hefa(int year,int month,int day)
{
int hefama=0;
int yun_year=0;
if((year%400==0)||((year%4==0)&&(year%100!=0)))
yun_year=1;
int month_max[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(yun_year)
month_max[1]=29;
if(day>0&&day<=month_max[month-1])
hefama=1;
return hefama;
}
int main()
{
char str[20];
while(gets(str))
printf("%d\n",shenfenzheng(str));
return 0;
}
6、相同字符的个数
#include<stdio.h>
int num(char* str,char a)
{
int count=0;
if(a>='a'&&a<='z')
a=a+'A'-'a';
while(*str!='\0')
{
if((*str==a)||(*str==a+'a'-'A'))
count++;
str++;
}
return count;
}
int main()
{
char str[1000];
char a;
gets(str);
scanf("%c",&a);
printf("%d\n",num(str,a));
return 0;
}
7、最后一个字母的长度
#include<stdio.h>
int len_least(char* str)
{
int i,count=0;
int station=0;
for(i=0;;i++)
{
if(str[i]!='\0')
{
if(str[i]==' ')
station=i;
}
else
break;
}
if(station==0)
i=0;
else
i=station+1;
for(;;i++)
{
if(str[i]!='\0')
count++;
else
break;
}
return count;
}
int main()
{
char str[100];
gets(str);
printf("%d\n",len_least(str));
return 0;
}
8、
数据输出n行,输出结果为按照字典序排列的字符串。
#include<stdio.h> #include<string.h> int main() { char abc[1000][100]; char temp[100]; int n,i,j; scanf("%d", &n);
//getcahr() //接住回车,不影响下面输入 for (i = 0; i < n; i++) //gets(abc[i]); scanf("%s", abc[i]); //getchar(); for (i = 0; i < n-1; i++) { for (j = 0; j < n - 1 - i; j++) { if (strcmp(abc[j], abc[j + 1])>0) { strcpy(temp, abc[j]); strcpy(abc[j], abc[j + 1]); strcpy(abc[j + 1], temp); } } } for (i = 0; i < n; i++) { printf("%s\n", abc[i]); } return 0; }
9、
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
#include<stdio.h>
#include<string.h>
int main()
{
char str[1000];
int len,i,j,num,flag,flag1,flag2,flag3,flag4;
while(scanf("%s",&str)!=EOF)//用于多组数据输入
{
i=0;flag=0;flag1=0;flag2=0;flag3=0;flag4=0;
len=strlen(str);
while(str[i]!='\0')//判断密码有几种符号
{
if(str[i]>='a'&&str[i]<='z')
{
flag1=1;
}
else if(str[i]>='A'&&str[i]<='Z')
{
flag2=1;
}
else if(str[i]>='0'&&str[i]<='9')
{
flag3=1;
}
else
{
flag4=1;
}
i++;
}
num=flag1+flag2+flag3+flag4;
for(i=0;i<len-2;i++)//判断3个以上连续字符是否同时出现两次
{
for(j=i+1;j<len-2;j++)
{
if(str[i]==str[j]&&str[i+1]==str[j+1]&&str[i+2]==str[j+2])
{
flag=1;
break;
}
}
}
if(len>8&&num>=3&&flag==0)
{
printf("OK\n");
}
else
{
printf("NG\n");
}
}
return 0;
}
10、 假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码
#include<stdio.h>
#include<string.h>
int
main()
{
char
s[
1000
];
int
i, len;
while
(scanf(
"%s"
, s) != EOF)
{
len = strlen(s);
for
(i =
0
; i < len; i++)
{
if
((s[i] >=
'a'
) && (s[i] <=
'z'
))
{
if
((s[i] >=
'a'
) && (s[i] <=
'c'
))
s[i] =
'2'
;
else
if
((s[i] >=
'd'
) && (s[i] <=
'f'
))
s[i] =
'3'
;
else
if
((s[i] >=
'g'
) && (s[i] <=
'i'
))
s[i] =
'4'
;
else
if
((s[i] >=
'j'
) && (s[i] <=
'l'
))
s[i] =
'5'
;
else
if
((s[i] >=
'm'
) && (s[i] <=
'o'
))
s[i] =
'6'
;
else
if
((s[i] >=
'p'
) && (s[i] <=
's'
))
s[i] =
'7'
;
else
if
((s[i] >=
't'
) && (s[i] <=
'v'
))
s[i] =
'8'
;
else
if
((s[i] >=
'w'
) && (s[i] <=
'z'
))
s[i] =
'9'
;
}
else
if
((s[i] >=
'A'
) && (s[i] <=
'Z'
))
{
if
((s[i] >=
'A'
) && (s[i] <=
'Y'
))
s[i] +=
33
;
else
if
(s[i] =
'Z'
)
s[i] +=
7
;
}
}
for
(i =
0
; i < len; i++)
printf(
"%c"
, s[i]);
printf(
"\n"
);
}
return
0
;
}
11、汽水瓶
#include <iostream>
using namespace std;
int
fun(
int
n)
{
if
(
1
==n)
return
0
;
if
(
2
==n)
return
1
;
return
n/
3
+fun(n/
3
+n%
3
);
}
int
main()
{
int
n;
while
(cin>>n)
{
if
(n!=
0
)
cout<<fun(n)<<endl;
}
return
0
;
}
#include <iostream>
using namespace std;
int
main(){
char
str[
21
],ch =
'\0'
;
int
index,min =
20
;
while
(cin >> str){
int
count[
26
] = {
0
};
for
(
int
i =
0
; str[i] !=
'\0'
; i++){
index = str[i] -
'a'
;
count[index]++;
if
(count[index] < min){
min = count[index];
}
}
for
(
int
j =
0
; str[j] !=
'\0'
; j++){
index = str[j] -
'a'
;
if
(count[index] > min){
cout << str[j];
}
}
cout << endl;
}
return
0
;
}
#include<iostream>
#include<stack>
#include<string.h>
#define N 65535
using namespace std;
int main()
{
char str[N];
char s[1000][1000];
int i = 0;
int j = 0;
int len= 0;
gets(str);
len = strlen(str);
for(int a= 0;a<len;a++)
{
if(str[a]!=' ')
{
s[i][j] = str[a];
j++;
}
else
{
i++;
j = 0;
}
}
for(;i>=0;i--)
{
if(i!=0)
{
printf("%s",s[i]);
printf(" ");
}
else
printf("%s",s[i]);
}
return 0;
}