אשמח לתשובות, תגובות
1.
;(unsigned int bitReverse(unsigned int num
הפונקציה לעיל הופכת את סדר הסיביות במספר מימין לשמאל. אנא ממש אותה מבלי להשתמש בשום
פונקצית ספריה לצורך הפתרון.
לדוגמא:
עבןר קלט של 1234 (0x000004D2): הפונקציה תחזיר את המספר 1260388352 (0x4B200000)
2.
unsigned int weakEncrypt(const char *from, const char *to, char *str)
הפונקציה לעיל מצפינה מחרוזת ע"י קוד החלפה. כל תו המופיע ב form מוחלף בתו המופיע באותו מקום ב to . כל תו אחר לא מוחלף כלל. הערך המוחזר של הפונקציה הוא 1 (אחד) אם ניתן לשחזר את המחרוזת המקורית באמצעות קריאה נוספת לפונקציה weakEncrypt, ו 0- (אפס) אם לא ניתן.
ניתן להניח שהמחרוזות חוקיות וש- from אינה מכילה אף תו יותר מפעם אחת ושהאורך של
to ושל from שווה.
אנא ממשו את הפונקציה.
לדוגמא:
הקריאה הבאה (S = “hello”; weakEncrypt(“ehlo”,”abcd",S
תחזיר 1 ו S יכיל baccd' '
הקריאה הבאה (S = “hello”; weakEncrypt(“ehlo”,”accd",S
תחזיר 0 ו S יכיל caccd'
לפני 11 שנים
ע"י: 1_אורח_כללי
כתבתי משהו יותר פשוט עבור השאלה ה-2:
unsigned int weakEncrypt(const char *from,const char* to,char *str)
{
int i=0;
char chCheck = {0};
if (!str)
return 0;
while (*str)
{
const char * tmpStartFrom = from;
//check if appear in from
while(*from)
{
if ((*str) == (*from ))
*str = to;
else
{
from++;i++;
}
}//of from
from = tmpStartFrom;
i=0;
str++;
}//of str
//if to has char twice we can't recover
while(*to)
{
if (chCheck == 1 )
return 0;
else
chCheck = 1;
to++;
}
return 1;
}
סטטיסטית, 65% מהמשרות בשוק לא חשופות בפניכם.
לכן, הטכנולוגיה שלנו מאתרת אנשי קשר בתוך החברות ומפנה אליהם קורות חיים של טאלנטים כמוכם. עם מיילינג ליסט של מעל 13,000 אנשי קשר בתעשייה, אנחנו מחברים אתכם ישירות למשרות החמות – מבפנים.
לבדיקת התאמה
לפני 16 שנים
ע"י: 1_אורח_כללי
אוקי עכשיו אני חושב שזה בסדר
unsigned int weakEncrypt(const char *from, const char *to, char *str)
{
int i=0; int j=0; int k=0; int m=0;
int str_length = strlen(str);
char *not_in_from = new char[str_length];
strcpy(not_in_from,"");
bool in_from = false;
for (i=0;i<str_length;i++)
{
for (j=0;j<strlen(from);j++)
{
if (str[i] == from[j])
{
in_from = true;
str[i] = to[j];
break;
}
}
if (!in_from)
strcat(not_in_from,&str[i]);
in_from = false;
}
char *to_and_not_in_from = new char[str_length+strlen(to)];
strcpy(to_and_not_in_from,"");
strcat(to_and_not_in_from,to);
strcat(to_and_not_in_from,not_in_from);
for (k=0;k<strlen(to_and_not_in_from);k++)
{
for (m=k+1;m<strlen(to_and_not_in_from);m++)
{
if (to_and_not_in_from[k] == to_and_not_in_from[m])
return 0;
}
}
return 1;
}
שרון גיא
לפני 16 שנים
ע"י: 1_אורח_כללי
tested and it seems to work
unsigned int weakEncrypt(const char *from, const char *to, char *str)
{
int i=0; int j=0; int k=0; int m=0;
int str_length = strlen(str);
for (i=0;i<str_length;i++)
{
for (j=0;j<strlen(from);j++)
{
if (str[i] == from[j])
str[i] = to[j];
}
}
החלק השני שבו אני מחזיר 1 או 0 לא מספיק טוב , אם יהיה לי זמן אחרי שאסיים לשתוף את הבית אני אתקן.
for (k=0;k<strlen(to);k++)
{
for (m=k+1;m<strlen(to);m++)
{
if (to[k] == to[m])
return 0;
}
}
return 1;
}
לפני 16 שנים
ע"י: 1_אורח_כללי
tested and it seems to work
unsigned int weakEncrypt(const char *from, const char *to, char *str)
{
int i=0; int j=0; int k=0; int m=0;
int str_length = strlen(str);
for (i=0;i<str_length;i++)
{
for (j=0;j<strlen(from);j++)
{
if (str[i] == from[j])
str[i] = to[j];
}
}
for (k=0;k<strlen(to);k++)
{
for (m=k+1;m<strlen(to);m++)
{
if (to[k] == to[m])
return 0;
}
}
return 1;
}
לפני 17 שנים
ע"י: 1_אורח_כללי
#include<stdio.h>
unsigned int bitRev(unsigned int num);
void main()
{
unsigned int num = 0x000004D2;
unsigned int RevNum = 0;
RevNum = bitRev(num);
printf(" RevNum = 0x%x\n",RevNum);
}
unsigned int bitRev(unsigned int num)
{
int n;
unsigned int RevNum = 0;
for(n=31; n>=0; n--)
{
RevNum += (1<<n)*(num&1);
num >>=1;
}
return RevNum;
}
לפני 17 שנים
ע"י: 1_אורח_כללי
1.
unsigned int bitReverse(unsigned int num){
int ans = 0;
int tmp;
int acc = 2^31;
for(int i=0;i<32 && num!=0;i++)
{
tmp = num & 0x00000001;
if(tmp>0)
ans += acc;
acc /= 2;
num >> 1;
}
return ans;
}
maybe there is a better way, using bitwise operations