计算工资
某公司员工的工资计算方法如下:一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的1.5倍计酬。员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。请按该计酬方式计算员工的工资。
输入:在一行中给出2个正整数,分别为某员工入职年数year 和周工作时间week,其间以空格分隔。
输出:输出该员工的周薪money,精确到小数点后2位。
优化目标:可能没有优化目标。
#include <stdio.h>
#include <stdlib.h>
int main(){
int year,week;
scanf("%d %d",&year,&week);
double money;
if(year>=5){
if(week>40){
money=2000+(week-40)*75;
}else money=week*50;
}
if(year<5){
if(week>40){
money=1200+(week-40)*45;
}else money=week*30;
}
printf("%.2f",money);
}
求单链表结点的阶乘和
本题要求实现一个函数,求单链表L
结点的阶乘和。这里默认所有结点的值非负,且题目保证结果在int
范围内。
输入:单链表L的结点个数N,以及各个结点的值Data。
输出:单链表L
的结点的阶乘和。
优化目标:可能没有优化目标。
#include <stdio.h>
#include <stdlib.h>
typedef struct Node *PtrToNode;
struct Node {
int Data; /* 存储结点数据 */
PtrToNode Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
int FactorialSum( List L );
int main()
{
int N, i;
List L, p;
scanf("%d", &N);
L = NULL;
for ( i=0; i<N; i++ ) {
p = (List)malloc(sizeof(struct Node));
scanf("%d", &p->Data);
p->Next = L; L = p;
}
printf("%d\n", FactorialSum(L));
return 0;
}
int FactorialSum( List L ){
int sum=0;
int i;
for(L;L!=NULL;L=L->Next){
int fact=1;
for(i=1;i<=L->Data;i++){
fact=fact*i;
}
sum=sum+fact;
}
return sum;
}
统计某类完全平方数
本题要求实现一个函数,判断任一给定整数N
是否满足条件:它是完全平方数,又至少有两位数字相同,如144、676等。
输入:给定整数N
输出:若它是完全平方数,又至少有两位数字相同,如144、676等则返回1,否则返回0。
优化目标:可能没有优化目标。
#include <stdio.h>
#include <math.h>
int IsTheNumber ( const int N );
int main()
{
int n1, n2, i, cnt;
scanf("%d %d", &n1, &n2);
cnt = 0;
for ( i=n1; i<=n2; i++ ) {
if ( IsTheNumber(i) )
cnt++;
}
printf("cnt = %d\n", cnt);
return 0;
}
int IsTheNumber ( const int N ){
int i,j;
int flag=0;
int a[10]={0};
int n=N;
for(i=10;i<=n;i++){
if(i*i==n){
while(n>0){
int num=n%10;
a[num]++;
n=n/10;
}
for(j=0;j<10;j++){
if(a[j]>=2){
flag=1;
return 1;
}
}
}
}
if(flag==0){
return 0;
}
}
统计个位数字
本题要求实现一个函数,可统计任一整数中某个位数出现的次数。例如-21252中,2出现了3次,则该函数应该返回3。
输入:给定整数N,某个位数D。
输出:N中D出现的次数。
优化目标:可能没有优化目标。
#include <stdio.h>
int Count_Digit ( const int N, const int D );
int main()
{
int N, D;
scanf("%d %d", &N, &D);
printf("%d\n", Count_Digit(N, D));
return 0;
}
int Count_Digit ( const int N, const int D ){
int n=N;
int d=D;
if(n<0){
n=0-n;
}
if(n==0){
if(d==0){
return 1;
}else{
return 0;
}
}
int a[10]={0};
while(n!=0){
int num=n%10;
a[num]++;
n=n/10;
}
return a[d];
}
念数字
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu
字。
输入:在一行中给出一个整数
输出:输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。
优化目标:可能没有优化目标。
#include<stdio.h>
#define maxsize 30
#include<string.h>
int main(){
char a[maxsize];
gets(a);
int len=strlen(a);
int n=len;
int i=0;
for(i;i<n-1;i++){
switch(a[i]){
case '-' :printf("fu "); break;
case '1' :printf("yi "); break;
case '2' :printf("er "); break;
case '3' :printf("san "); break;
case '4' :printf("si "); break;
case '5' :printf("wu "); break;
case '6' :printf("liu ");break;
case '7' :printf("qi "); break;
case '8' :printf("ba "); break;
case '9' :printf("jiu "); break;
case '0' :printf("ling "); break;
default :printf("no "); break;
}
}
switch(a[i]){
case '-' :printf("fu"); break;
case '1' :printf("yi"); break;
case '2' :printf("er"); break;
case '3' :printf("san"); break;
case '4' :printf("si"); break;
case '5' :printf("wu"); break;
case '6' :printf("liu");break;
case '7' :printf("qi"); break;
case '8' :printf("ba"); break;
case '9' :printf("jiu"); break;
case '0' :printf("ling"); break;
default :printf("no"); break;
}
}
今天学习了c语言的一些经典例题,明天也会继续学习这部分内容。