1、括号匹配
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node
{
char data;//节点数据域
struct Node *pNext;//下一节点的指针域
}NODE,*PNODE;
//建立栈
typedef struct Stack
{
PNODE pTop;//栈头指针
PNODE pBottom;//栈尾部指针
}STACK,*PSTACK;
void init(PSTACK pS);
void push(PSTACK pS,char val);
int pop(PSTACK pS,char *val);
int empty(PSTACK pS);
void traverse(PSTACK pS);
void clear(PSTACK pS);
int progress(PSTACK pS,char data[10000]);
int main(int argc, char** argv) {
int i;
char data[10000];
int result[100];
STACK S;
char val;
init(&S);
int length;
scanf("%d",&length);
for(i=0;i<length;i++)
{
scanf("%s",data);
result[i]=progress(&S,data);
}
for(i=0;i<length;i++)
{
if(result[i])
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}
//初始化栈
void init(PSTACK pS)
{
PNODE p=(PNODE)malloc(sizeof(NODE));
if(p==NULL)
{
printf("初始化失败!\n");
// exit(-1);
}
else
{
p->pNext=NULL;
pS->pTop=p;
pS->pBottom=p;
}
}
//压入栈
void push(PSTACK pS,char val)
{
PNODE pNew=(PNODE)malloc(sizeof(NODE));
if(pNew==NULL)
{
printf("压栈失败!\n");
// exit(-1);
}
else
{
pNew->data=val;
pNew->pNext=pS->pTop;
pS->pTop=pNew;
}
}
//判断栈是否为空
int empty(PSTACK pS)
{
if(pS->pBottom==pS->pTop)
{
return 1;
}
else
{
return 0;
}
}
//栈的遍历
void traverse(PSTACK pS)
{
PNODE p=pS->pTop;
while(p!=pS->pBottom)
{
printf("%c\n",p->data);
p=p->pNext;
}
}
//出栈
int pop(PSTACK pS,char *val)
{
PNODE p=pS->pTop;
if(!empty(pS))
{
pS->pTop=pS->pTop->pNext;
*val=p->data;
// free(p);
return 1;
}
else
{
return 0;
}
}
//栈的清空
void clear(PSTACK pS)
{
PNODE p=NULL;
while(empty(pS))
{
p=pS->pTop;
pS->pTop=pS->pTop->pNext;
// free(p);
}
pS->pTop=pS->pBottom;
}
//处理程序
int progress(PSTACK pS,char data[10000])
{
int i;
int j=0;
int n=0;
int ch;
char val;
int len=strlen(data);
if((len%2)!=0)
{
return 0;
}
else
{
clear(pS);
push(pS,data[0]);
for(i=1;i<len;i++)
{
if(pop(pS,&val))
{
ch=data[i]-val;
if(ch!=1&&ch!=2)
{
push(pS,val);
push(pS,data[i]);
}
}
else
{
push(pS,data[i]);
}
}
if(empty(pS))
{
return 1;
}
else
{
return 0;
}
}
}
2、从考试成绩中划分及格线
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int a[10],i,s[7]={0};
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
switch(a[i]/10)
{
case 10:
case 9:
case 8:
case 7:
case 6:s[6]++;break;
case 5:s[5]++;break;
case 4:s[4]++;break;
case 3:s[3]++;break;
case 2:s[2]++;break;
case 1:s[1]++;break;
case 0:s[0]++;break;
}
}
for(i=6;i>0;i--)
{
if(a[i]>=6)
break;
else
a[i-1]+=a[i];
}
printf("%d",i*10);
return 0;
}
3、控制灯亮,给出最后灯亮的盏数
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int n,i,j,num,a;
scanf("%d",&n);
num=0;
for(i=1;i<=n;i++)
{
a=0;
for(j=1;j<=i;j++)
{
if(i%j==0)
{
a++;
}
}
if(a%2==0)
{
num++;
}
}
printf("%d",num);
return 0;
}